2020年9月

今天先参照 https://www.jianshu.com/p/ddf7c0153644 这个里面的说明写了相应的配置文件,结果一启动容器就报错了。

Creating docker-test_mysql_1 ... 
Creating docker-test_mysql_1 ... error

ERROR: for docker-test_mysql_1  Cannot start service mysql: driver failed programming external connectivity on endpoint docker-test_mysql_1 (22e74af6dece7dd4cae19aa8809099c6fde961e19f6b43178bb34a595e1c5a02): Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use

ERROR: for mysql  Cannot start service mysql: driver failed programming external connectivity on endpoint docker-test_mysql_1 (22e74af6dece7dd4cae19aa8809099c6fde961e19f6b43178bb34a595e1c5a02): Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use
ERROR: Encountered errors while bringing up the project.

参考 https://www.cnblogs.com/loovelj/p/7823093.html 这个里面的做法,首先查看是否本机的 mysql 占用了端口。

netstat -tunlp | grep 3306

确定是本机的 mysql,就停止服务。

service mysql stop

然后通过 ps -ef|grep mysqld 可以发现 mysql 已经停止了。然后重新使用 docker-compose up -d 启动容器,这下就不报错了。

使用 docker ps 来查看容易的状态属性,id 和 names 这两个值都可以用来指定容器。

docker exec -it docker-test_mysql_1 bash
docker exec -it f24473a1626a bash

上面这两条命令分别用 name 和 id 来指定容器执行 bash 命令,效果是一样的。这样就进入了容器的命令行。

停止 docker

docker-compose stop

删除 docker

docker rm docker-test_mysql_1

docker 中使用 mysql 的时候,init 文件夹下面的 sql, sh, sql.gz 这些文件会被遍历,然后执行,但是执行顺序没有办法保证,所以想要按照一定顺序执行,只能通过 sh 脚本来编写处理过程, 具体参考:https://blog.csdn.net/boling_cavalry/article/details/71055159

在 init 脚本中 mysql -uroot -p$MYSQL_ROOT_PASSWORD <<EOF 注意 -p 后面不要有空格,否则可能不能以 root 登录 mysql; 不要忘了给 init 脚本所有人可执行权限,因为只有 db 对应的文件夹是 mysql的,其他的文件夹都是 1000:1000,可能导致执行权限问题。

在 init 脚本中,mysql 命令里面创建用户的时候,密码必须有单引号,因为用了单引号,变量外面就必须有大括号,才能保证正确。

create user '${MYSQL_USER}'@'localhost' IDENTIFIED BY '${MYSQL_PASS}';

在mysql 中使用 root 登录的时候,通过命令 select * from mysql.user 来查看有哪些用户。

GRANT ALL PRIVILEGES ON  数据库名.表名 TO '$user1'@'%' IDENTIFIED BY '$password1' REQUIRE X509;
GRANT  SELECT,INSERT,ALTER,UPDATE,DELETE ON iot_ny.* TO  'Iothui'@'localhost';

可以用这些命令给用户赋权。

搜索可以用哪些镜像,可以去 https://hub.docker.com/ 上搜索。

参考: https://blog.csdn.net/weixin_33670713/article/details/93029183 https://stackoverflow.com/questions/33470753/create-mysql-database-and-user-in-bash-script https://blog.csdn.net/wangmx1993328/article/details/81805371 https://blog.csdn.net/boling_cavalry/article/details/71120725 https://stackoverflow.com/questions/20033648/how-to-run-mysql-command-on-bash https://superuser.com/questions/288621/create-mysql-database-with-one-line-in-bash https://www.cnblogs.com/fuhai0815/p/9548213.html https://blog.csdn.net/m0_38143867/article/details/94046889 https://github.com/zq2599/docker_disconf/blob/master/docker-compose.yml https://www.cnblogs.com/whych/p/9446032.html https://blog.csdn.net/u011913691/article/details/90665639 https://github.com/SingletonPattern/compose-demo/blob/master/compose-demo/docker-compose.yml https://www.cnblogs.com/ray-mmss/p/12249204.html https://blog.csdn.net/weixin_41043145/article/details/92834784 https://www.cnblogs.com/badaoliumangqizhi/archive/2019/09/16/11530695.html https://www.jianshu.com/p/658911a8cff3 https://www.jianshu.com/p/ddf7c0153644

没有安装过 docker 的 ubuntu 安装 docker的步骤:

$ sudo apt-get update

$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

如果选择官方的源:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
apt-key fingerprint 0EBFCD88

如果选择阿里的源:

sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add -
sudo apt-key fingerprint 0EBFCD88

添加官方仓库:

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

添加阿里仓库:

sudo add-apt-repository \
   "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
apt-cache madison docker-ce

从上面输出的版本中找到你需要的版本:

sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io

如果这里报错,可以尝试这个命令,我用这个命令进行安装就没有问题:

sudo apt-get -y install docker-ce=[VERSION]
sudo docker run hello-world
sudo gpasswd -a 用户名 docker
sudo service docker restart
newgrp - docker

安装 docker-compose,先去 https://github.com/docker/compose/releases 找到你需要的版本,然后替换下面的 1.24.1 这个版本号,我用的是 1.27.3 :

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version

参考: https://docs.docker.com/engine/install/ubuntu/ https://www.cnblogs.com/walker-lin/p/11214127.html https://www.runoob.com/docker/docker-compose.html https://blog.csdn.net/liqi_q/article/details/83030737 https://www.cnblogs.com/grow1016/p/11533645.html

  1. 购买 obs
  2. 创建 bucket,注意这个名称不能和所有使用华为云 obs 里面的桶重名。
  3. 点击右上角账号,选择我的凭证,访问密钥,新增访问密钥,然后验证后,就可以下载csv 文件,里面包含了 ak 和 sk。
  4. 在 ces 里面
    wget https://obs-community.obs.cn-north-1.myhuaweicloud.com/obsutil/current/obsutil_linux_amd64.tar.gz
    tar -xzvf obsutil_linux_amd64.tar.gz
    mv obsutil_linux_amd64_5.44 obsutil
    chmod 755 obsutil
  5. ./obsutil/obsutil config -i=ak -k=sk -e=endpoint
    ./obsutil/obsutil ls -s

    ak, sk 是上面的 csv 里面的。 endpoint 是控制台的 bucket 属性里面的。 正常的话能够返回一个 bucket,不会报错。

参考: https://support.huaweicloud.com/utiltg-obs/obs_11_0003.html https://support.huaweicloud.com/utiltg-obs/obs_11_0004.html https://support.huaweicloud.com/utiltg-obs/obs_11_0005.html https://support.huaweicloud.com/bestpractice-obs/obs_05_0430.html https://www.cnblogs.com/donkey2603089141/p/11414776.html

typecho 的文件 如果是不是直接放到 html 目录下面,而是作为 html 的子目录来存放的话,默认就会出现这个问题。 在华为云上面,修改 /etc/nginx/conf.d/default.conf 这个文件

location ~ .*\.php$

需要修改为

location ~ .*\.php(\/.*)*$

然后 service nginx reload 重启 nginx 的服务就可以了。 刚重启之后 控制面板立刻就能显示出来,但是其他的页面需要过会才能正常显示。

这时候其他功能都能够使用,就是搜索不能使用,参考网上其他人的方法,终于找到了解决方法。 首先在后台里面点击 设置 --> 永久链接,在里面开启 地址重写功能,就算有警告提示,也选择确定。 然后修改 default.conf 文件,增加 ```location /note/ { if (-f request_filename/index.html){ rewrite (.*)1/index.html break; } if (-f request_filename/index.php){ rewrite (.*)1/index.php last; } if (!-f $request_filename){ rewrite (.*) /note/index.php last; } }

其中 note 是你自己的子目录名字,注意第三个 if 前面有 !。然后重启 nginx 即可。

如果不是子目录那么在 location / { 里面添加

if (-f request_filename/index.html){ rewrite (.*)1/index.html break; } if (-f request_filename/index.php){ rewrite (.*)1/index.php; } if (!-f $request_filename){ rewrite (.*) /index.php; }


自定义上传目录
在 config.inc.php 里新增一行下列代码即可,其中 your_upload_dir 是你要上传的目录:

define('TYPECHO_UPLOAD_DIR', 'your_upload_dir');



参考:http://docs.typecho.org/faq
http://forum.typecho.org/viewtopic.php?f=24&t=5203&p=27529&hilit=%E5%AD%90%E7%9B%AE%E5%BD%95#p27529
https://www.xiaoz.me/note/212.html
https://cloud.tencent.com/developer/article/1356132

在 namesilo 界面上点击 my domains,然后再点击 active domains, 然后点击你要设置的域名,进入域名管理页面。点击 dns records 后面的 update。 然后点击 A ,修改A记录,hostname 可以保留为空白,address 填写 主机ip地址,然后 submit。 然后点击 cname,hostname 填写 www,targetname 填写你绑定的不带 www 的域名,然后 submit。 这样 www 和 不带 www 的域名就都可以指向你的主机地址了。后续还可以增加 mail 等功能。