个人笔记--部署个人网站的艰辛历程

最近给网站添加了后台,记录访问者数据的。往服务器上部署的时候很不顺利,记录一下遇到的问题及解决方案,供日后参考。

http://tomatowork.ssophie.com/
服务器在日本,访问起来不是很快…我说搞台国内云主机,老杨说,要各种备案实名,麻烦的紧…艾西…


1. docker mysql容器起来之后几分钟就挂了。挂的悄无声息,毫无痕迹。


docker ps -a能看到它exit code是137,除此之外,docker logs containerId也看不到任何有用信息。docker inspect containerID也看不到什么error信息。
这篇文章为exit(137)做了详细解释,十分有帮助,大概意思就是out of memory,宿主机器扛不住了就把容器kill了
https://success.docker.com/article/what-causes-a-container-to-exit-with-code-137
运行journalctl -k | grep -i -e memory -e oom,果然看到mysqld out of memory了…
然后我受到启发,运行以下命令cat /proc/meminfo查看机器内存,少的可怜,一共1G,free的只有100多。艾西。内存加到2G,再运行docker就可以了。

  • 启动docker命令:systemctl start docker

  • 启动docker mysql容器的命令:

docker run -p 3306:3306 --privileged=true  -v /home/tomatowork/data/mysql/conf:/etc/mysql  -v /home/tomatowork/data/mysql/logs:/var/log/mysql -v /home/tomatowork/data/mysql/data:/var/lib/mysql -v /home/tomatowork/data/mysql/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=hahaha -d mysql:5.7

/home/tomatowork/data/mysql/my.cnf的内容为:

[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000
 
[client]
default-character-set=utf8
 
[mysql]
default-character-set=utf8

首次启动容器后,要进去mysql容器内创建database以及表,命令如下:

docker exec -it containerID /bin/bash
mysql -uroot -phahaha
create database TomatoWork;
use TomatoWork;
create table if not exists visitor_info(...);

做好操作之后,退出容器命令:

\q 会退出Mysql
exit 然后从docker exec里面退出来,回到正常terminal来

2. 网站后台java -jar /home/tomatowork/backend/tomatowork-1-1.0.jar运行之后,terminal不能退出,不然这个进程也就终止了。


我是在自己的mac terminal里面用ssh root@服务器IP去操作的。学到了一个screen的工具,它可以做到在一个终端里面,自由切换多个命令后台,而不用担心关闭当前终端导致进程结束的问题。

首先screen -S java新建一个screen,在里面运行java -jar /home/tomatowork/backend/tomatowork-1-1.0.jar,然后control + A + D安然退出。

screen -ls可以看到所有的screen。想要回到任何一个screen里面去的话,就screen -r screenID就行了。

[root@vultr dist]# screen -ls
There are screens on:
        2168.java       (Detached)
        1721.docker     (Attached)
        1688.java       (Detached)
3 Sockets in /run/screen/S-root.
[root@vultr dist]# screen -r 2168

3. nginx配置好之后,启动起来,网站访问不了,报错403 Forbidden


一开始没经验,谷歌胡乱搜,什么Index.html没有放在网站root文件夹下啦,网站root文件夹nginx运行用户没权限之类的,根本就不是我的情况。静下心来之后,突然想起来,nginx不是有自己的log吗,路径在nginx.conf里面有
vim /etc/nginx/nginx.conf然后cat /var/log/nginx/error.log
error.log里面赫赫然写着index.html没权限。实际上,整个项目的root folder的权限设置都是可以的,并且nginx是用root启动的。
2020/05/08 04:39:39 [error] 700#0: *1 open() "/home/tomatowork/dist/index.html" failed (13: Permission denied), client: 124.108.22.19, server: www.tomato.ssophie.com,
最后用setenforce 0这个命令解决了问题,网站就可以正常访问了。

nginx -t -c /etc/nginx/nginx.conf //测试配置文件
nginx -s reload //修改配置文件后重新加载
nginx  //nginx启动

查看nginx进程:ps aux | grep "nginx"
查看端口号情况:netstat -anp |grep 80
nginx.conf文件内容:

user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    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;
    include /etc/nginx/conf.d/*.conf;

    server{
        listen 80 default_server;
        listen       [::]:80 ipv6only=on default_server;
        server_name  www.tomatowork.ssophie.com;
        root         /home/tomatowork/dist;
        include /etc/nginx/default.d/*.conf;

        location /api/ {
                proxy_pass http://localhost:9867;
        }
                error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

你可能感兴趣的:(个人笔记,Docker,nginx)