# simblog **Repository Path**: linuxbugs/simblog ## Basic Information - **Project Name**: simblog - **Description**: 一个基于python3.10,django4.2 版本的个人博客系统 - **Primary Language**: Python - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-05-01 - **Last Updated**: 2023-10-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # simblog 简单博客系统 ### 介绍 这是一个基于django的博客系统,目前实现: 1. 博客首页,博客评论,留言板(可以后台审核),个人日志,about页面 2. 后台进行了一定的美化,但是肯定还有Bug 3. 数据库目前采用的是mysql, 没有配置redis缓存等机制 4. 侧边栏可以控制显示的功能,目前不是特别完善,但是也基本够用 前台展示: ![本地路径](./media/images/demo01.png "博客前台页面") 后台展示: ![本地路径](./media/images/demo02.png "博客后台") ### 软件架构 * 基于django4.2,python3.10 * 使用docker进行部署,使用的gunicorn运行 * 或者手工部署也是可以的 ### 安装教程 #### 博客部署概略 服务器:腾讯云2C2G 60G SSD,购买方式自行查询 部署方式:Nginx+uwsgi+python3.9+django4.2+mysql8.0 关于证书:我得域名在阿里云买的,所以是用的是阿里云生成的免费证书 #### 创建服务部署路径 ```bash mkdir /app ``` #### MySQL部署 下载MySQL并解压mysql ```bash cd /app wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.34-linux-glibc2.28-x86_64.tar.gz tar -xvf mysql-8.0.34-linux-glibc2.28-x86_64.tar.gz mv mysql-8.0.34-linux-glibc2.28-x86_64 mysql cd mysql/ echo "mysql-8.0.34-linux-glibc2.28-x86_64" > version.txt mkdir data log ``` 创建用户 ```bash groupadd mysql useradd -r -g mysql -s /sbin/nologin mysql ``` 初始化mysql ```bash cd /app/mysql bin/mysqld --initialize --user=mysql --basedir=/app/mysql --datadir=/app/mysql/data # 该步骤会生成root的初始化密码,一会需要该密码登陆并重置密码 ``` 编辑my.cnf配置 \# 需要删除 /etc/my.cnf文件,以免影响真实配置 vim /app/mysql/my.cnf ```php [mysql] port = 3306 socket = /app/mysql/data/mysql.sock [mysqld] port = 3306 mysqlx_port = 33060 mysqlx_socket = /app/mysql/data/mysqlx.sock basedir = /app/mysql datadir = /app/mysql/data slow_query_log=1 slow_query_log_file=/app/mysql/data/anolis-slow.log long_query_time=3 log_output=FILE socket = /app/mysql/data/mysql.sock pid-file = /app/mysql/data/mysqld.pid log-error = /app/mysql/log/error.log #这个就是用之前的身份认证插件 default-authentication-plugin = mysql_native_password #保证日志的时间正确 log_timestamps = SYSTEM ``` 创建error.log ```bash # 一些不知名原因,需要手动创建,不然不能启动mysql echo "" > /app/mysql/log/error.log ``` 将app下mysql及所有文件修改所有者为mysql ```bash cd /app chown -R mysql:mysql mysql/ ``` 配置mysql启动脚本 ```bash cd /app/mysql/ cd support-files/mysql.server ../ mv mysql.server mysqld vim mysqld # 修改如下相关参数,相同的配置有多处,请注意修改 basedir=/app/mysql datadir=/app/mysql/data sbindir=/app/mysql/bin libexecdir=/app/mysql/bin ``` 拷贝mysqld到/etc/init.d/mysqld ```bash cd /app/mysql/ mv mysqld /etc/init.d/ ``` 启动服务: ```bash [root@anolis ~]# /etc/init.d/mysqld start Starting MySQL. SUCCESS! ``` 登陆并修改密码: ```bash /app/mysql/bin/mysql -uroot -h127.0.0.1 -p'!AzGq>:Xo8k1' # 这个密码就是初始化密码,每次部署会不一样 mysql> alter user 'root'@'localhost' identified by '你自己的密码'; ``` 至此,MySQL搭建完毕。 #### 部署simblog 安装miniconda3 ```bash wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py39_4.9.2-Linux-x86_64.sh sh Miniconda3-py39_4.9.2-Linux-x86_64.sh # 部署目录为/usr/local/miniconda3 vim ~/.bashrc export PATH="/usr/local/miniconda3/bin:$PATH" source ~/.bashrc ``` 安装uwsgi ```bash conda install -c conda-forge uwsgi ``` 下载代码 ```bash cd /app git clone https://gitee.com/linuxbugs/simblog.git ``` 修改配置文件 ```bash cd simblog/ vim uwsgi.ini # [uwsgi] # 你的项目目录 chdir = /app/simblog # 如果有虚拟环境,则需要指定虚拟环境目录; 没有则注释掉 home = /app/venv/simblog # 指向自己Django项目目录下projectName目录下的wsgi文件 (上面的wsgi.py) module = simblog.wsgi:application master = True # 使用进程数 processes = 4 # 使用的线程数 threads = 2 # 最大超时时间 harakiri = 60 # 最大请求数,到了后就会自动重启 max-requests = 5000 # socket连接地址和端口,和nginx配置一致, socket = 127.0.0.1:8000 # http = 127.0.0.1:8000 不使用nginx这样配置 # http-socket = 0.0.0.0:8000 # 不建议使用http方式,服务会假死(推荐使用http-socket) # 在失去权限前,将pid写到指定的pidfile文件中 pidfile = /app/simblog/uwsgi.pid # 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器, 不配置日志就是前台运行,部署测试时可以先注释掉 daemonize = /app/simblog/logs/uwsgi.log # 只记录错误日志 disable-logging = True # chmod-socket = 664 # 如果没有权限访问uWSGI的socket,这里可以设置权限 # 服务退出或重启,自动删除pid和socket文件 vacuum = True #代码有修改重启 py-autoreload = 1 #配置查看服务运行状态的端口 stats = :9191 ``` 创建虚拟环境并安装requirements.txt ```bash mkdir /app/venv cd /app/venv python3 -m venv simblog source simblog/bin/activate yum install mysql-devel pip install -r requirements.txt ``` 修改配置文件 ```bash vim /app/simblog/simblog/settings/settings_proc.py # 修改数据库配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'simblog', 'USER': 'simblog', 'PASSWORD': '你的密码', 'HOST': '127.0.0.1', 'PORT': '3306', } } ``` 创建数据库 ```bash cd /app/mysql bin/mysql -uroot -h127.0.0.1 -p 输入密码: mysql> CREATE USER 'simblog'@'localhost' IDENTIFIED BY '密码'; mysql> GRANT all privileges ON simblog."*" TO 'simblog'@'localhost'; ``` 初始化数据库 ```bash python manage.py makemigrations python manage.py migrate python manage.py createsuperuser # 创建管理员账号,一步一步操作即可 ``` 在虚拟环境下启动 ```bash cd /app source venv/simblog/bin/activate uwsgi --ini simblog/simblog_uwsgi.ini # 如果想停止的话 uwsgi --stop simblog/simblog_master.pid ``` #### Nginx安装于配置 安装nginx ```bash yum install -y nginx ``` 备份原来的nginx文件 ```bash cd /etc/nginx cp nginx.conf nginx.conf_backup # 然后修改nginx.conf ``` nginx.conf ```bash user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. include /usr/share/nginx/modules/*.conf; events { worker_connections 2048; } http { limit_req_zone $binary_remote_addr zone=one:10m rate=100r/s; # 触发条件,所有访问ip 限制每秒10个请求 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; server { listen 443 ssl http2 default_server; listen [::]:443 ssl http2 default_server; server_name www.linuxbugs.cn; # root /usr/share/nginx/html; ssl_certificate "/etc/nginx/ssl/www.linuxbugs.cn.pem"; ssl_certificate_key "/etc/nginx/ssl/www.linuxbugs.cn.key"; ssl_session_cache shared:SSL:1m; ssl_session_timeout 10m; ssl_ciphers PROFILE=SYSTEM; ssl_prefer_server_ciphers on; location / { limit_req zone=one burst=8 nodelay; # 执行的动作,通过zone名字对应 include uwsgi_params; uwsgi_pass 127.0.0.1:8000; uwsgi_read_timeout 100; } location /static { limit_req zone=one burst=8 nodelay; # 执行的动作,通过zone名字对应 alias /app/simblog/static; } # Load configuration files for the default server block. # include /etc/nginx/default.d/*.conf; } } ``` 证书来自于阿里云的免费证书,申请地址:[如何申请免费DV单域名试用证书_数字证书管理服务-阿里云帮助中心 (aliyun.com)](https://help.aliyun.com/zh/ssl-certificate/user-guide/apply-for-a-single-domain-dv-certificate-for-free-trial?spm=a2c4g.11186623.0.i2#task-2436672) 测试配置文件是否正常: ```bash [root@VM-8-14-opencloudos simblog]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful ``` 启动nginx,并使用浏览器访问 ```bash systemctl start nginx ``` 默认的管理员账号: - 自行设置 ### 使用说明 - 暂无说明 ### 参与贡献