解决 Docker 容器中 dns 不生效的问题

给 Docker 配置 dns

在 /etc/docker/ 中新建 daemon.json 文件,写入以下内容:

{
	"registry-mirrors": [
		"https://your.mirrors.host"
	],
	"dns": [
		"8.8.8.8",
		"8.8.4.4"
	]
}

重启 docker 服务

systemctl daemon-reload
systemctl restart docker

开启防火墙伪装 IP

端口转发可以将指定地址访问指定的端口时,将流量转发至指定地址的指定端口。端口转发会用到伪装 IP 的功能。在宿主机上执行下面的命令:

firewall-cmd --zone=public --add-masquerade --permanent
firewall-cmd --reload
systemctl restart firewalld
systemctl restart docker

Windows 中安装 Node.js Zip 版本

下载 Node.js

https://nodejs.org/en/download/

解压并配置环境变量

将下载后的 zip 安装包解压到你的开发工具目录,如 D:\DevTools\node-v14.16.0,然后讲这个目录配置到环境变量

修改 npm 环境目录和镜像地址

在 D:\DevTools\node-v14.16.0 中新建一个文件夹,名为 etc,然后在 etc 中新建一个名为 npmrc 的文件,npmrc 输入一下内容

cache = "E:\\Repository\\npm-cache"
registry = "https://registry.npm.taobao.org/"

打开命令提示符,输入 npm config list 检查配置是否生效

Windows 中安装 PostgreSQL 13.1 zip版

下载zip包

https://www.enterprisedb.com/download-postgresql-binaries

初始化数据库

## Windows 下:
initdb.exe -D E:\DataDir\pgsql -E UTF-8 --locale=chinese-simplified_china.936 -U postgres -A password -W
## Linux/Unix 下:
initdb.exe -D E:\DataDir\pgsql -E UTF-8 --locale=zh_CN.UTF-8 -U postgres -A password -W

启动数据库

pg_ctl.exe start -D E:\DataDir\pgsql

将数据库安装为系统服务

## 以系统管理员身份运行下面命令
pg_ctl.exe register -D E:\DataDir\pgsql
net start PostgreSQL

## 删除系统服务
net stop PostgreSQL
pg_ctl.exe unregister -N PostgreSQL

CentOS 7.5.1804 安装 Redis 4.0.10

从官网下载安装包

解压 redis-4.0.10.tar.gz

tar -xzvf redis-4.0.10.tar.gz

按照 README.md 的安装步骤安装即可

% make install
% cd utils
% ./install_server.sh

如果提示错误,则表示系统没有gcc环境

/bin/sh: cc: 未找到命令

执行以下命令安装

yum install gcc-c++

清理一下上次make失败的信息,再进行 make install 否则会报错

make distclean

安装完毕后续步骤

编辑/etc/redis/6379.conf,注释掉下面一行(不配置IP白名单):

# bind 127.0.0.1

设置密码:

requirepass 123456

注意,如果设置了密码,启动脚本文件也要相应的修改:/etc/init.d/redis_6379

# 增加一个密码变量
PASSWORD=123456
# 通过 -a 指定密码
$CLIEXEC -p $REDISPORT -a $PASSWORD shutdown

CentOS 8.2.2004 安装 Docker 19.03.12

安装 docker 依赖包

yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

设置阿里云仓库

yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装 containerd.io

wget https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.13-3.2.el7.x86_64.rpm
yum install ./containerd.io-1.2.13-3.2.el7.x86_64.rpm

安装 Docker

yum install docker-ce docker-ce-cli

启动、测试 Docker

systemctl start docker
docker run hello-world

CentOS 8.2.2004 安装 Nexus OSS 3.26.1

下载Nexus

https://sonatype-download.global.ssl.fastly.net/repository/downloads-prod-group/3/nexus-3.26.1-02-unix.tar.gz

执行安装

将下载的包解压到指定目录,如 /opt/nexus,进入 /opt/nexus/nexus-3.26.1-02/bin 目录,执行启动命令:

tar -xzvf nexus-3.26.1-02-unix.tar.gz -C nexus
cd nexus/nexus-3.26.1-02/bin
./nexus start

若在启动过程中提示找不到 JDK,则需要安装 JDK。

设置开机自启动(安装服务)

在 /usr/lib/systemd/system 目录下创建 nexus.service 文件,内容如下:

[Unit]
Description=nexus
After=network.target

[Service]
Type=forking
Environment="JAVA_HOME=/opt/jdk1.8.0_172"
ExecStart=/opt/nexus/nexus-3.26.1-02/bin/nexus start
ExecReload=/opt/nexus/nexus-3.26.1-02/bin/nexus restart
ExecStop=/opt/nexus/nexus-3.26.1-02/bin/nexus stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target

然后启动服务

systemctl start nexus
systemctl enable nexus

访问服务

端口是8081,http://ip-address:8081

CentOS 8.2.2004 安装 GitLab CE 13.2.4

离线下载地址

https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el8/

安装依赖包

yum install -y policycoreutils-python-utils perl

执行安装

rpm -ivh gitlab-ce-13.2.4-ce.0.el8.x86_64.rpm

修改配置文件

vim /etc/gitlab/gitlab.rb
external_url 'http://yourip'

初始化配置

gitlab-ctl reconfigure

禁用普罗米修斯 Prometheus

vim /etc/gitlab/gitlab.rb
prometheus_monitoring['enable'] = false

gitlab-ctl stop
gitlab-ctl reconfigure
gitlab-ctl start

关闭CI/CD功能

vim /etc/gitlab/gitlab.rb
gitlab_rails['gitlab_default_projects_features_builds'] = false

查看 GitLab 运行日志

sudo gitlab-ctl tail

访问服务

端口是80,http://ip_address

ThinkPHP 快速开发 RESTFul 接口

在一个基本的 ThinkPHP 开发环境启动成功以后,还要对 PHP 的配置文件、ThinkPHP 框架的数据库连接配置做一些改变,才能进行 RESTFul 接口的开发。ThinkPHP 开发环境搭建方法请参考 https://blog.yanand.tech/archives/150.html

PHP 配置

ThinkPHP 应用要访问数据库,要在 PHP 中开启数据库扩展,打开 D:\DevTools\php-7.4.1\php.ini 文件,找到如下两个配置,去掉前面的注释:

extension=mysqli
extension=pdo_mysql

ThinkPHP 数据库配置

创建数据库和建表的过程这里不再描述,我创建好的数据名为 qanmi,表名为 user,表中主要有三个字段 id,name,age。

到工程目录下,例如我的是 D:\E\Workspace\php\tp 找到 .example.env 文件,复制一份重命名为 .env,打开 .env 修改数据库配置为自己创建好的数据库配置。

[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = qanmi
USERNAME = your_username
PASSWORD = your_password

生成接口代码

ThinkPHP 提供了自动生成部分代码的功能,命令提示符定位到工程目录,输入命令来生成代码。

D:\E\Workspace\php\tp>php think make:controller User --api
Controller:app\controller\User created successfully.

D:\E\Workspace\php\tp>php think make:model User
Model:app\model\User created successfully.

这时一共生成了两个 User.php 文件,controller 下面的用来编写接口,model 下面的用来编写模型。模型中不需要再写任何的代码,它已经提供了对数据库基本的增删改查操作,controller 中调用模型数据库的操作还需要自行编写。以下是我编写的 controller 代码。

use app\model\User as UserModel;
class User
{
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {
        return UserModel::field('id,name,age,create_time')->select();
    }

    /**
     * 保存新建的资源
     *
     * @param  \think\Request  $request
     * @return \think\Response
     */
    public function save(Request $request)
    {
        $data = $request->only(['name','age']);
        UserModel::create($data);
    }

    /**
     * 显示指定的资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function read($id)
    {
        return UserModel::field('id,name,age,create_time')->find($id);
    }

    /**
     * 保存更新的资源
     *
     * @param  \think\Request  $request
     * @param  int  $id
     * @return \think\Response
     */
    public function update(Request $request, $id)
    {
        $data = $request->only(['name','age']);
        UserModel::update($data, ['id' => $id]);
    }

    /**
     * 删除指定资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function delete($id)
    {
        UserModel::destroy($id);
    }
}

controller 编写完成后需要将它注册到路由中,打开 \route\app.php 文件,加入资源路由声明。

Route::resource('user', 'User');

表示注册了一个名称为 user 的资源路由到 User 控制器,系统会自动注册5个路由规则,如下:

标识请求类型生成路由规则对应操作方法(默认)
indexGETuserindex
savePOSTusersave
readGETuser/:idread
updatePUTuser/:idupdate
deleteDELETEuser/:iddelete
路由规则

测试接口

使用 Postman 测试查询接口 http://localhost:8000/user/25

Windows 下快速搭建 ThinkPHP 开发环境

Composer 是 PHP 用来管理依赖(dependency)关系的工具,类似于 Java 的 maven,NodeJS 的 npm。ThinkPHP 是一个 PHP 版的 MVC 框架。根据本人的实战,本文概述了一个基于 PHP 和 Composer 搭建 ThinkPHP 的快速流程。

安装 PHP

进入 PHP 官方网站,下载 PHP 安装包,下载地址:
https://windows.php.net/download
下载后将安装包解压到你想要安装的目录,例如:
D:\DevTools\php-7.4.1
在 php-7.4.1 目录下找到 php.ini-development 文件复制一份,重命名为 php.ini,打开 php.ini,打开以下几处注释掉的配置项:

extension_dir = "ext"
extension=mbstring
extension=openssl

配置完成后将 PHP 安装目录 D:\DevTools\php-7.4.1 配置到 Path 环境变量下。

安装 Composer

下载 Composer:
https://mirrors.aliyun.com/composer/composer.phar
下载后将安装包解压到你想要安装的目录,例如:
D:\DevTools\composer-1.9.1
进入 composer-1.9.1 目录,创建一个新文件命名为 composer.bat,打开这个文件,写入以下内容:

@php "%~dp0composer.phar" %*

配置完成后将 Composer 安装目录 D:\DevTools\composer-1.9.1 配置到 Path 环境变量下。

检查 PHP 和 Composer 是否安装成功

分别输入 php -v 和 composer -V 命令,检查安装情况

安装 ThinkPHP

进入你的开发工作空间,如 D:\E\Workspace\php,输入命令初始化 ThinkPHP 项目:

composer create-project topthink/think tp

这里的 tp 目录名你可以任意更改,它就是你要开发的项目目录,等待项目初始化完成后进入 tp 目录,输入下面的命令运行项目,然后在浏览器验证项目是否运行成功。

由于国外的网站连接速度很慢,安装的时间可能会比较长,可以使用国内镜像(阿里云)来加快安装速度。可以在安装 ThinkPHP 之前执行以下命令:

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/