https://github.com/flaskbb/flaskbb https://flaskbb.org/installation/ https://flaskbb.org/deployment/ https://flaskbb.readthedocs.io/en/latest/installation.html #安装 git clone https://github.com/sh4nks/flaskbb.git cd flaskbb git checkout 2.0.0 pip3.6 install virtualenv virtualenv .venv .\.venv\Scripts\activate.ps1 #如果是linux,命令变为source .venv/bin/activate pip3.6 install -r requirements.txt #生产模式配置及启动 #生成flaskbb.cfg配置文件,需要交互式填写配置信息,生成完毕后可以自己修改参数配置 flaskbb makeconfig #bbs.guojingyi.cn mysql+pymysql://user_flaskbb:123456@127.0.0.1:13316/flaskbb redis://:123456@localhost:6379 #重置数据库,并设置站点登录用户和密码 flaskbb --config flaskbb.cfg install #启动站点 flaskbb --config flaskbb.cfg run -h 0.0.0.0 -p 80 --cert bundle.crt --key bundle.key #开发模式配置及启动 #生成flaskbb.cfg配置文件,需要交互式填写配置信息,生成完毕后可以自己修改参数配置 flaskbb makeconfig -d #启动站点 flaskbb --config flaskbb.cfg run #配置supervisor、uwsgi、nginx yum install -y supervisor uwsgi uwsgi-plugin-python36u cat <<EOF > /etc/supervisord.d/uwsgi.ini [program:uwsgi] command=/usr/sbin/uwsgi /etc/uwsgi.ini ; 运行程序的命令 user=root ; 进程执行的用户身份 stopsignal=QUIT ; 用来杀死进程的 autostart=true ; 随着supervisord的启动而启动 autorestart=true ; 程序异常退出后自动重启 startretries = 3 ; 启动失败自动重试次数,默认是 3 startsecs=60 ; 重试间隔 numprocs=1 ; 启动几个进程 ; stderr_logfile=/var/log/uwsgi.err.log ; 错误日志文件 ; stdout_logfile=/var/log/uwsgi.out.log ; 输出日志文件 environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量 EOF cat <<EOF > /etc/uwsgi.ini [uwsgi] uid = nginx gid = nginx pidfile = /run/uwsgi/uwsgi.pid emperor = /etc/uwsgi.d stats = /run/uwsgi/stats.sock chmod-socket = 660 emperor-tyrant = true cap = setgid,setuid EOF cat <<EOF > /etc/uwsgi.d/uwsgi_flaskbb.ini [uwsgi] master = true # 非多站模式时 vhost = true 和 no-site = true 需要注释掉,否则后续 nginx 配置文件中设置的入口文件则不生效,服务器会回应 Internal Server error # vhost = true # no-site = true # the base directory (full path) chdir = /opt/flaskbb pythonpath = %(chdir) # module module = wsgi callable = flaskbb #名称与yum install -y supervisor uwsgi uwsgi-plugin-python36u plugin对应 plugins = python36u virtualenv = /opt/flaskbb/.venv # maximum number of worker processes processes = 3 # the socket (use the full path to be safe socket = /dev/shm/uwsgi_flaskbb.sock # pid file pidfile = /opt/flaskbb/uwsgi_flaskbb.pid # log file daemonize = /opt/flaskbb/uwsgi_flaskbb.log # ... with appropriate permissions - may be needed chmod-socket = 664 # clear environment on exit vacuum = true uid=nginx gid=nginx EOF cat <<EOF > /opt/nginx/conf/vhosts/bbs.guojingyi.cn.conf server { listen 80; server_name bbs.guojingyi.cn; rewrite ^(.*)$ https://$host$1 permanent; } server { listen 443 ssl http2; server_name bbs.guojingyi.cn; ssl_certificate certs/Nginx/1_bbs.guojingyi.cn_bundle.crt; ssl_certificate_key certs/Nginx/2_bbs.guojingyi.cn.key; #由于这两个命令的默认值已经好几次发生了改变,因此不建议显性定义,除非有需要额外定义的值 # ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; charset utf-8; access_log logs/bbs.guojingyi.cn.access.log main; error_log logs/bbs.guojingyi.cn.error.log warn; location / { include naxsi.conf; set_cookie_flag HttpOnly secure; try_files $uri @flaskbb; limit_req zone=one burst=5 nodelay; limit_conn addr 10; } location @flaskbb { include uwsgi_params; uwsgi_pass unix:///dev/shm/uwsgi_flaskbb.sock; } # Static files location /static { alias /opt/flaskbb/flaskbb/static; } location ~ ^/_themes/([^/]+)/(.*)$ { alias /opt/flaskbb/flaskbb/themes/$1/static/$2; } # robots.txt location /robots.txt { alias /opt/flaskbb/flaskbb/static/robots.txt; } # favicon.ico location /favicon.ico { alias /opt/flaskbb/flaskbb/static/favicon.ico; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location ~ /\. { deny all; } #禁止访问所有目录下的sql|log|jar|war|sh|py等后缀的文件 location ~* \.(sql|log|jar|war|sh|bash|ksh|py|bak|tar|zip|gz|bz|doc|svn|git)$ { deny all; } ## 只允许的web方法 if ($request_method !~ ^(GET|HEAD|POST)$) { return 444; } # 阻止用户代理,如扫描器,机器人和垃圾邮件 if ($http_user_agent ~* jaunty|crawldaddy|bot|lwp::simple|bbbike|wget|msnbot|scrapbot|scrapy|httpclient|idm|aria2|axel|thunder|youtube-dl|movgrab|rtorrent|ctorrent|transmission-cli|vuze) { return 403; } if ($http_user_agent ~ ^$) { return 403; } } EOF #启动服务 systemctl start supervisord systemctl enable supervisord supervisorctl reload supervisorctl status supervisorctl start uwsgi supervisorctl status uwsgi systemctl restart nginx #浏览器访问地址 https://bbs.guojingyi.cn