mailtrain部署(local and public website)

730 阅读6分钟

mailtrain v2 three endpoints都要安装,使用nginx反向代理避免跨域

初次安装时理解错误,致使少设置了宿主机端口到container端口的映射!准备利用已安装的mailtrain/mailtrain:lastest image再次创建一个新container,创建时设置端口映射。指令:sudo docker run -ti -d --name mailtrain-v2 -p 3005:3000/tcp -p 3003:3003/tcp -p 3004:3004/tcp mailtrain/mailtrain:latest 产生了新问题——新container与mongo、maridb、redis containers之间不存在内部网络,无法相互配合,必须用安装时自动创建的老container。


如何给启动后的容器加上宿主机端口的映射(mariadb 0.0.0.0:9002 -> 3306/tcp)

♦方案一(推荐):更改容器配置文件
配置文件是 /var/lib/docker/containers/[hash_of_the_container]/hostconfig.json 和 config.v2.json 
两个文件。docker inspect 容器名字  可以在终端查看容器的两个配置文件信息。
在 hostconfig.json 里有 "PortBindings":{} 这个配置项,可以改成
"PortBindings":{"3306/tcp":[{"HostIp":"","HostPort":"9002"}]}
在 config.v2.json 里面添加一个配置项 "ExposedPorts":{"3306/tcp":{}} , 
将这个配置项添加到 "Tty": true, 前面。
"Service":null,"之后添加Ports":{"3306/tcp":[{"HostIp":"0.0.0.0","HostPort":"9002"}]}
配置文件修改完成后,重启docker进程  service docker restart
docker ps -a查看端口映射
-------------------------------------------------------------------------------------------
方案二:以运行的容器为镜像新建此容器,创建时加端口映射
docker commit [containerid] [image-name]
docker run -d -p 8000:80 [image-name] /bin/bash
新创建的容器与其他容器不存在内部联系,所以此方案不推荐
-------------------------------------------------------------------------------------------
方案三:通过宿主机的iptables进行nat转发,将宿主机的端口映射到容器的内部端口上
nat转发参考:《Docker容器内部端口映射到外部宿主机端口的方法小结》
https://cloud.tencent.com/developer/article/1193005
网络上详细教程大多是关于centOS,ubuntu少之又少,ubuntu的iptables配置文件藏得很深,不推荐此方案

nginx反向代理解决跨域

  1. 调整docker-compose.yml中的MAILTRAIN_SETTINGS,MAILTRAIN_SETTINGS修改源代码中的基础URL
MAILTRAIN_SETTINGS="--trustedUrlBase https://localhost:9000/trusted/ --sandboxUrlBase https://localhost:9000/sandbox/ --publicUrlBase https://localhost:9000/public/ --withProxy" docker-compose up
  1. nginx 反向代理配置
server {
listen 9000;

server_name localhost;

location /trusted {
rewrite ^/trusted/(.*)$ /$1 break;
proxy_pass http://127.0.0.1:3000;
}
location /sandbox {
rewrite ^/sandbox/(.*)$ /$1 break;
proxy_pass http://127.0.0.1:3003;

}
location /public {
rewrite ^/public/(.*)$ /$1 break;
proxy_pass http://127.0.0.1:3004;

}
}

docker安装 mailtrain v2,使用“docker-compose up -d”后,报错“ERROR: Couldn’t connect to Docker daemon at http+docker://localhost – is it running?If it’s at a non-standard location, specify the URL with theDOCKER_HOST environment variab”

sudo gpasswd -a ${USER} docker  //将当前用户加入docker组
systemctl restart docker
docker-compose up -d

端口可以随机分配吗?端口如何分配?

端口作用:一台主机可以提供多种服务,比如web服务,ftp服务等等,
我们采用“ip+端口号”区分不同的网络服务。端口号标识主机内唯一的一个进程,ip+端口号标识网络中唯一的进程。

端口分配:

预留端口号–取值范围0-1023,日常编程不能使用,系统程序使用,
获取root权限后才能被分配一个预留端口号;

登记端口号–取值范围1024-49151,平常编写服务器使用的端口号范围;

客户端使用的端口号–取值范围49152-65535,这部分是客户端进程运行时动态选择的范围,又叫临时端口号。

公认端口号:知名端口即众所周知的端口号,范围从0到1023,这些端口号一般固定分配给一些服务。
比如21端口分配给FTP(文件传输协议)服务,25端口分配给SMTP(简单邮件传输协议)服务,
80端口分配给HTTP服务,135端口分配给RPC(远程过程调用)服务等等

docker-compose.yml中port设置

映射端口的标签。
使用HOST:CONTAINER格式或者只是指定容器的端口,宿主机会随机映射端口。

ports:
- "3000"
- "8000:8000"
- "49100:22"
- "127.0.0.1:8001:8001"
注意:当使用HOST:CONTAINER格式来映射端口时,如果你使用的容器端口小于60你可能会得到错误得结果,
因为YAML将会解析xx:yy这种数字格式为60进制。所以建议采用字符串格式。

参考: 《docker-compose.yml 配置文件使用详解》
https://blog.csdn.net/skh2015java/article/details/80410348

直接向mailtrain数据库中导入subscriber信息

avatar

/*新建lists实例*/
INSERT INTO lists(id,cid,default_form,name,description,subscribers,created,public_subscribe,unsubscription_mode,listunsubscribe_disabled,namespace,contact_email,homepage,to_name,send_configuration) VALUES(3,'3k12coDer',NULL,'insert-1',NULL,0,20191009163750,1,0,0,1,NULL,'www.k12coder.com','[MERGE_FIRST_NAME] [MERGE_LAST_NAME]',2);      




/*新建permissions_list实例*/
INSERT INTO permissions_list(entity,user,operation) VALUES
(3,1,'delete'),
(3,1,'edit'),
(3,1,'manageFields'),
(3,1,'manageImports'),
(3,1,'manageSegments'),
(3,1,'manageSubscriptions'),
(3,1,'send'),
(3,1,'sendToTestUsers'),
(3,1,'share'),
(3,1,'view'),
(3,1,'viewFields'),
(3,1,'viewImports'),
(3,1,'viewSegments'),
(3,1,'viewSubscriptions'),
(3,1,'viewTestSubscriptions');


/*创建表subscription__3*/
CREATE TABLE `subscription__3` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`cid` varchar(255) CHARACTER SET ascii NOT NULL,
`email` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
`hash_email` varchar(255) CHARACTER SET ascii NOT NULL,
`source_email` int(11) DEFAULT NULL,
`opt_in_ip` varchar(100) DEFAULT NULL,
`opt_in_country` varchar(2) DEFAULT NULL,
`tz` varchar(100) CHARACTER SET ascii DEFAULT NULL,
`status` tinyint(4) unsigned NOT NULL DEFAULT 1,
`is_test` tinyint(4) unsigned NOT NULL DEFAULT 0,
`status_change` timestamp NULL DEFAULT NULL,
`unsubscribed` timestamp NULL DEFAULT NULL,
`latest_open` timestamp NULL DEFAULT NULL,
`latest_click` timestamp NULL DEFAULT NULL,
`created` timestamp NOT NULL DEFAULT current_timestamp(),
`custom_first_name_ygjxqegna1` varchar(255) DEFAULT NULL,
`source_custom_first_name_ygjxqegna1` int(11) DEFAULT NULL,
`custom_last_name_madds53vq` varchar(255) DEFAULT NULL,
`source_custom_last_name_madds53vq` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `hash_email` (`hash_email`), --UNIQUE [ INDEX | KEY] [<索引名>] [<索引类型>] (<列名>,…)表示在创建新表的同时创建该表的唯一性索引。
UNIQUE KEY `cid` (`cid`),
KEY `email` (`email`), -- KEY | INDEX [<索引名>] [<索引类型>] (<列名>,…)表示在创建新表的同时创建该表的索引。

KEY `status` (`status`),
KEY `subscriber_tz` (`tz`),
KEY `is_test` (`is_test`),
KEY `latest_open` (`latest_open`),
KEY `latest_click` (`latest_click`),
KEY `created` (`created`),
KEY `subscription__3_custom_first_name_ygjxqegna1_index` (`custom_first_name_ygjxqegna1`),
KEY `subscription__3_custom_last_name_madds53vq_index` (`custom_last_name_madds53vq`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;


/*向表subscription__3插入数据*/
INSERT INTO `mailtrain`.`subscription__3`
(`id`,
`cid`,
`email`,
`hash_email`,
`source_email`,
`opt_in_ip`,
`opt_in_country`,
`tz`,
`status`,
`is_test`,
`status_change`,
`unsubscribed`,
`latest_open`,
`latest_click`,
`created`,
`custom_first_name_ygjxqegna1`,
`source_custom_first_name_ygjxqegna1`,
`custom_last_name_madds53vq`,
`source_custom_last_name_madds53vq`)
VALUES
(1,
'Q1MYW-XlC',
'mabiao1024@163.com',
'i9BXBBhrwX2/gMZLenWcitQHB6QuYvMeRMIXv4x/R61nKcH8G4KAQbDdeW2J7P/sBdJOr1CtjN6jdDt74i2fPA==',
-1,
NULL,
NULL,
'asia/shanghai',
1,
0,
20191009210000,
NULL,
NULL,
NULL,
20191009210000,
'Ma',
-1,
'Biao',
-1),
(2,
'Vd1Br0mqP',
'1286369661@qq.com',
'0d6qg8oMoy+UVuMJRgI0nhiwBNOm/fzUwRyxrBoliaPoopdZTfXPuJkvLDbnQESIdDwxAFcqK5wlYlEink3f2g==',
-1,
NULL,
NULL,
'asia/shanghai',
1,
0,
20191009210000,
NULL,
NULL,
NULL,
20191009210000,
'Ma',
-1,
'Biao',
-1),
(3,
'yZPN9amf4',
'1925005015@qq.com',
'BIAmfJ0EldikA4/nd9d8X5ZzCuOUvU4YZReAjk9z5fih40tLaUisG6+vGKZukQPVy8VcygjusWmXYGU6A4cc3g==',
-1,
NULL,
NULL,
'asia/shanghai',
1,
0,
20191009210000,
NULL,
NULL,
NULL,
20191009210000,
'Zhang',
-1,
'Wenhao',
-1);