-
Linux使用npm安装pm2
pm2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控、自动重启、负载均衡等,而且使用非常简单。 安装npm yum install npm -y npm卸载npm npm uninstall npm -g 安装ggc yum install gcc gcc-c++ 新建一个目录存放软件包 mkdir npm cd npm wget https://npm.taobao.org/mirrors/node/v10.14.1/node-v10.14.1-linux-x64.tar.gz 解压 tar -xvf node-v10.14.1-linux-x64.tar.gz mv node-v10.14.1-linux-x64 node 添加环境变量 vi /etc/profile #在其中添加 export NODE_HOME=/root/npm/node export PATH=$NODE_HOME/bin:$PATH //注意!! NODE_HOME后面的值要添加到自己的node解压的路径 刷新配置 source /etc/profile 查看版本情况 node -v npm -v 安装pm2 npm install -g pm2 pm2 list 到此就已经完成安装了。
-
在Debian 10 Buster上设置OpenStreetMap(OSM)平铺服务器
OpenStreetMap(OSM)是一个用户贡献的、可自由编辑的世界地图。你可以把它看作是谷歌地图的开源和自托管替代品。本教程将向您展示如何在Debian 10上构建自己的OpenStreetMap tile服务器,这样您就不必使用专有的地图服务。 OpenStreetMap功能 OpenStreetMap的数据覆盖了全世界,因此可以方便地支持任何国家或每个国家的用户。 OpenStreetMap每天每小时每分钟都会更新,您可以实时获得这些更新。 OpenStreetMap数据是免费和开放的,不收取订阅费和页面浏览费。 OpenStreetMap数据丰富而详细,包含大量与地面人员相关的数据——收集数据的人员。 先决条件/硬件要求 所需的RAM和磁盘空间取决于要使用哪个国家的地图。例如 英国地图至少需要12G内存和100GB磁盘空间。 整个行星地图至少需要32G RAM和1TB SSD(固态驱动器)。用旋转硬盘来绘制整个地球地图是不可行的。 如果要在web浏览器中预渲染分幅以加快地图加载速度,则需要更多磁盘空间,这是强烈建议的。查看此磁贴磁盘使用情况页面,查看预渲染磁贴需要多少磁盘空间。例如,如果要为行星地图预渲染从缩放级别0到缩放级别15的平铺,则需要额外的460 GB磁盘空间。 另外需要注意的是,将大型地图数据(如整个地球)导入PostgreSQL数据库需要很长时间。考虑添加更多的RAM,特别是使用SSD,而不是旋转硬盘来加速导入过程。 如果你打算主持整个世界地图,我建议你从康塔博购买超大VPS,康塔博以 10核CPU 60 GB内存 1.6 TB英特尔Optane SSD 每月只需26.99欧元。 第一步:升级软件 在服务器上进行任何主要工作之前,更新服务器软件始终是一种好的做法。通过SSH登录服务器并运行以下命令。 sudo-apt更新;sudo-apt升级 如果遇到以下错误, perl:警告:退回到备用语言环境(“en_US.UTF-8”)。perl:警告:设置区域设置失败。perl:警告:请检查您的区域设置:LANGUAGE=(unset)、LC_ALL=(unset)、LC_MONETARY=“zh_CN.UTF-8”、LC_ADDRESS=“zh_CN.UTF-8”、LC_TELEPHONE=“zh_CN.UTF-8”、LC_NAME=“zh_CN.UTF-8”、LC_IDENTIFICATION=“zh_CN.UTF-8”、LC_NUMERIC=“zh_CN.UTF-8”、LC_PAPER=“zh_CN.UTF-8”,LANG=“en_US.UTF-8”支持并安装在您的系统上。perl:警告:退回到备用语言环境(“en_US.UTF-8”)。 这意味着您的本地计算机正在尝试将locale环境变量发送到debian VPS,但debian没有安装locale。要解决此问题,请编辑SSH守护程序配置文件。 sudo nano/etc/ssh/sshd_config 向下滚动到最后,您将看到下面一行,它告诉SSH守护进程从SSH客户端接受环境变量。 接受朗信用证_* 将其更改为以下内容,使SSH守护进程不接受环境变量。 接受号 保存并关闭文件。然后重启SSH守护进程。 sudo systemctl重启ssh 注销并重新登录。您将不再看到区域设置错误。 第2步:安装PostgreSQL数据库服务器和PostGIS扩展 我们将使用PostgreSQL存储地图数据。PostGIS是PostgreSQL的地理空间扩展。运行以下命令来安装它们。 sudo apt安装postgresql postgresql contrib postgis postgresql-11-postgis-2.5 PostgreSQL数据库服务器将自动启动并侦听127.0.0.1:5432。安装过程中将在操作系统上创建postgres用户。它是PostgreSQL数据库服务器的超级用户。默认情况下,该用户没有密码,也不需要设置密码,因为您可以使用sudo切换到postgres用户并登录到PostgreSQL server。 sudo-u postgres-i 现在可以创建PostgreSQL数据库用户osm。 createuser osm 然后创建一个名为gis的数据库,同时让osm成为数据库的所有者-UTF8指定数据库中使用的字符编码方案为UTF8。 createdb-E UTF8-O osm gis 接下来,为gis数据库创建postgis和hstore扩展。 psql-c“创建扩展postgis-d gis psql-c“创建扩展存储-三维地理信息系统 将osm设置为表所有者。 psql-c“将表空间参考系统所有者更改为osm-三维地理信息系统 退出postgres用户。 出口 在操作系统上创建osm用户,以便平铺服务器可以作为osm用户运行。以下命令将创建一个没有密码的系统用户。 sudo adduser——系统osm 第3步:下载地图样式表和地图数据 切换到osm的主目录。 cd/home/osm/ 使用git将最新的CartoCSS地图样式表下载到osm用户的主目录。 sudo apt安装git git克隆https://github.com/gravitystorm/openstreetmap-carto.git 如果在运行上述命令时看到“权限被拒绝”错误,则可以使用以下命令授予权限。用真实用户名替换用户名。 sudo apt install acl sudo setfacl-R-mu:username:rwx/home/osm/ 接下来,运行以下命令以PBF(ProtoBufBinary)格式下载整个行星(50G)的地图数据。 wget-chttp://planet.openstreetmap.org/pbf/planet-latest.osm.pbf 请注意openstreetmap的下载速度。org当前限制为2048kb/s。您可以从另一个镜像下载植物地图,如 wget-chttps://download.bbbike.org/osm/planet/planet-latest.osm.pbf 如果你想要一张各个国家/州/省/市的地图,请访问http://download.geofabrik.de.还有,自行车。org以不同的格式提供了全球200多个城市和地区的摘录。例如,使用以下命令下载英国地图数据(1.1G)。 wget-chttp://download.geofabrik.de/europe/great-britain-latest.osm.pbf 第4步:优化PostgreSQL Server性能 导入过程可能需要一些时间。为了加快这个过程,我们可以调整一些PostgreSQL server设置以提高性能。编辑PostgreSQL主配置文件。 sudo nano/etc/postgresql/11/main/postgresql。形态 首先,我们应该更改共享缓冲区的值。默认设置为: 共享缓冲区=128MB 这个太小了。经验法则是将其设置为总RAM的25%(不包括交换空间)。例如,我的VPS有60G RAM,所以我将其设置为: 共享缓冲区=15GB 找到下面这行。 #工作_内存=4MB#维护_工作_内存=64MB 同样,该值太小。我使用以下设置。 工作记忆=1GB维护记忆=8GB工作记忆=8GB 然后找到下面一行。 #有效缓存大小=4GB 如果你像我一样有很多RAM,你可以为有效的缓存大小设置一个更高的值,比如20G。 有效缓存大小=20GB 保存并关闭文件。重新启动PostgreSQL以使更改生效。 sudo systemctl重启postgresql 默认情况下,PostgreSQL会尝试在RAM中使用巨大的页面。然而,Linux默认情况下不会分配巨大的页面。检查PostgreSQL的进程ID。 sudo head-1/var/lib/postgresql/11/main/postmaster。pid 样本输出: 7031 然后检查该进程ID的峰值。 grep^VmPeak/proc/7031/status 样本输出: 峰值:16282784 kB 这是PostgreSQL将使用的峰值内存大小。现在检查Linux中巨大页面的大小。 cat/proc/meminfo | grep-i巨大 样本输出: AnonHugePages:0 kB ShmemHugePages:0 kB HugePages_总计:0 HugePages_免费:0 HugePages_Rsvd:0 HugePages_剩余:0 HugePages大小:2048 kB Hugetlb:0 kB 我们可以计算出我们需要多少巨大的页面。将VmPeak值除以巨大页面的大小:16282784KB/2048KB=7950。编辑/etc/sysctl。conf文件。 sudo nano/etc/sysctl。形态 添加以下行以分配7950个大页面。 虚拟机。nr_hugepages=7950 保存并关闭文件。然后应用更改。 sudo sysctl-p 如果你再次查看meminfo, cat/proc/meminfo | grep-i巨大 我们可以看到有7950个巨大的页面可用。 AnonHugePages:0 kB ShmemHugePages:0 kB HugePages_总计:7950 HugePages_免费:7950 HugePages_Rsvd:0 HugePages_剩余:0 HugePages大小:2048 kB Hugetlb:16281600 kB 重新启动PostgreSQL以使用大型页面。 sudo systemctl重启postgresql 在远程服务器上使用屏幕 由于导入过程可能需要很长时间,并且您的计算机可能已断开与Internet的连接,因此建议使用screen实用程序使会话保持活动状态。Debian 10服务器上的安装屏幕: sudo apt安装屏幕 然后启动屏幕: 屏幕 第一次启动时,您将看到一个介绍文本,只需按Enter键即可结束。然后你就可以像往常一样运行命令了。 步骤5:将地图数据导入PostgreSQL 要导入地图数据,我们需要安装osm2pgsql,将OpenStreetMap数据转换为支持postGIS的PostgreSQL数据库。 sudo apt安装osm2pgsql 向postgres用户授予权限。 sudo setfacl-R-mu:postgres:rwx/home/osm/ 切换到postgres用户。 sudo-u postgres-i 运行以下命令将地图样式表和地图数据加载到gis数据库中。最新取代英国。奥斯曼。pbf与您自己的地图数据文件。 osm2pgsql--slim-dGIS--hstore--multi-geometry--number processs 10--tag transform script/home/osm/openstreetmap carto/openstreetmap carto。lua——style/home/osm/openstreetmap carto/openstreetmap carto。款式-C 32000/家居/osm/英国最新款。奥斯曼。pbf 哪里 --苗条模式:在苗条模式下运行,而不是在正常模式下运行。如果希望将来使用OSM更改文件(OSC)更新地图数据,则需要此选项。 -d gis:选择数据库。 --hstore:将不带列的标记添加到PostgreSQL表的另一个hstore(key/value)列中 --多重几何图形:在postgresql表中生成多重几何图形特征。 --样式:指定样式文件的位置 --进程数:服务器上的CPU核心数。我有10个。 -C标志以兆字节为单位指定缓存大小。它应该是你机器上可用内存的70%左右。缓存大小越大,导入速度越快。例如,我的服务器有60GB的空闲RAM,所以我可以指定-C 32000。请注意,PostgreSQL将需要用于共享缓冲区的RAM。使用此公式计算缓存大小应该有多大:(总RAM-PostgreSQL共享_缓冲区)*70% 最后,需要指定地图数据文件的位置。 命令输出: 如果要导入完整的行星地图数据,请使用--drop选项和--flat nodes选项来提高导入速度。请注意--flat nodes选项不适用于小贴图。 osm2pgsql--slim-dGIS--drop--flat nodes/home/osm/nodes。cache--hstore--multi-geometry--number processs 10--tag transform script/home/osm/openstreetmap carto/openstreetmap carto。lua——style/home/osm/openstreetmap carto/openstreetmap carto。款式-C 32000/家居/osm/planet最新款式。奥斯曼。pbf 在导入过程中,RAM的使用将逐渐增加。 现在,您可能不需要在服务器上执行其他操作。由于您使用的是Screen,所以可以按Ctrl+A,释放这些键,然后按D键从当前屏幕会话中分离。您将看到如下消息。 [与32113.pts-1.buster分离] 这告诉我之前的屏幕会话ID是32113。您可以从SSH会话中注销,甚至可以关闭计算机。别担心,OSM导入过程仍在运行。当需要返回并检查导入进度时,请将SSH连接到服务器并运行以下命令以获取上一个屏幕会话ID。 屏幕-ls 样本输出: 屏幕显示:32113。pts-1。buster(2020年5月19日03:45:29下午)(已分离)1个插座插入/运行/屏幕/S-linuxbabe。 然后可以重新连接到上一个屏幕会话。 屏幕-r 32113 这样你就能继续工作了。导入完成后,将gis数据库的所有权限授予osm用户。 psql-c“将模式公共中所有表的所有权限授予osm-三维地理信息系统 退出postgres用户。 出口 注意:如果osm2pgsql导入尚未完成,请不要继续执行步骤6。 第6步:安装mod_tile和Renderd mod_tile是一个Apache模块,需要为tiles提供服务,renderd是渲染OpenStreetMap tiles的渲染守护进程。默认的Debian Buster存储库不包括mod_tile和renderd,因此我们需要编译源代码。 首先,安装构建依赖项。 sudo apt安装git autoconf libtool libmapnik dev apache2 dev 然后从Github克隆存储库。 git克隆https://github.com/openstreetmap/mod_tile.gitcd mod_瓷砖/ 编辑一个文件。 纳米debian/compat 默认情况下,兼容性级别设置为7。但是,您应该使用兼容性级别9,所以将数字7更改为9。保存并关闭文件。 然后编辑另一个文件。 nano debian/changelog 找到第一行。 libapache2 mod tile(0.4-12~精度2)精确;紧急程度=低 将其更改为以下内容。0.4-12应改为0.4.12,精度2应改为buster。 libapache2 mod tile(0.4.12~buster)精确;紧急程度=低 保存并关闭文件。然后编译源代码包。 /自动发电。sh sudo dpkg建筑包-加州大学-美国 现在将有两个。deb包在上层目录中。用apt安装它们。 光盘sudo-apt-install/libapache2-mod-tile_0.4.12~buster_amd64。黛布/renderd_0.4.12~buster_amd64。黛布 在安装过程中,它将安装Apache web服务器,并询问您是否希望在Apache配置中启用mod_tile。选择Yes并按Enter键。这将为mod_tile(/etc/apache2/sites available/tileserver_site.conf)创建一个Apache配置文件。 渲染守护进程将自动启动,如下所示: systemctl状态呈现 第7步:生成Mapnik样式表 安装所需的软件包。 sudo apt install curl解压gdal bin mapnik utils libmapnik dev python3 pip python3-psycopg2 我们还需要使用以下命令从上游存储库安装nodejs和npm。 curl-sLhttps://deb.nodesource.com/setup_12.x| sudo-E bash-sudo apt get install-y nodejs 然后用npm安装carto软件包。 sudo npm安装-g carto 安装yaml Python模块。 sudo-H pip3安装pyyaml 切换到postgres用户。 sudo-u postgres-i 将Cd放入carto style目录。 cd/home/osm/openstreetmap carto/ 获取形状文件。 脚本/获取外部数据。py 如果在运行上述命令时遇到以下错误消息,则说明您存在DNS问题。只需等待几分钟,然后再次运行Python脚本。 未能建立新连接:[Errno-3]名称解析暂时失败 现在使用carto map样式表编译器构建Mapnik XML样式表。 carto项目。mml>;风格xml 将gis数据库的所有权限授予osm用户。 psql-c“将模式公共中所有表的所有权限授予osm-三维地理信息系统 退出postgres用户。 出口 第8步:安装字体 您需要安装ttf dejavu软件包。 sudo apt安装ttf dejavu 要显示非拉丁字符,请安装以下软件包。 sudo apt安装字体noto cjk字体noto cjk额外字体noto提示字体noto未连接ttf unifont 步骤9:配置renderd 编辑渲染配置文件。 sudo nano/etc/renderd。形态 在[renderd]部分,根据服务器上的CPU内核数更改线程数。 线程数=10 在[default]部分,将XML和HOST的值更改为以下值。请注意,以分号(;)开头的行这些都是评论。 XML=/home/osm/openstreetmap carto/style。xml HOST=tile。你的领域。通用域名格式 在[mapnik]部分,将plugins_dir的值更改为以下值。 plugins_dir=/usr/lib/mapnik/3.0/input/ 您可以使用以下命令打印默认的输入插件目录。 mapnik config——输入插件 如果要显示非拉丁字符,最好将字体设置更改为以下内容。 font_dir=/usr/share/fonts/truetype font_dir_recurse=true 保存并关闭文件。然后编辑init脚本文件 sudo nano/etc/init。d/renderd 找到下面这行。 RUNASUSER=www数据 将用户更改为osm。这是从PostgreSQL数据库加载地图数据所必需的。 RUNASUSER=osm 还要设置renderd配置文件的路径。 DAEMON_ARGS=“-c etc/renderd.conf” 保存并关闭文件。将osm设置为/var/lib/mod_tile/目录的所有者,该目录将保存渲染的tile文件。 sudo chown osm/var/lib/mod_tile/-R 然后重新启动renderd服务。 sudo systemctl守护进程重新加载sudo systemctl restart renderd 你需要查看renderd的日志。 sudo journalctl-欧盟趋势 确保renderd在重启后不会在日志中产生任何错误,否则地图将不会显示。 第10步:配置Apache 编辑OSM虚拟主机文件。 sudo nano/etc/apache2/sites available/tileserver_site。形态 将服务器名更改为您自己的域名,如tile。你的领域。通用域名格式。您还需要为此子域创建DNS记录。 服务器名互动程序。你的领域。通用域名格式 保存并关闭文件。重启Apache。 sudo systemctl重启apache2 然后在web浏览器地址栏中键入 瓦片你的领域。com/osm/0/0/0。巴布亚新几内亚 你应该看到世界地图的瓷砖。恭喜!您刚刚成功构建了自己的OSM磁贴服务器。 如果已启用UFW防火墙,请确保使用以下命令打开端口80和443。 sudo ufw允许80443/tcp 如果您看到404 not found错误,只需等待几分钟,在浏览器中刷新页面,它应该能够加载世界地图的平铺。如果仍然无法加载,则重新启动renderd服务(sudo systemctl restart renderd)。 第11步:显示平铺的网络地图 平铺网络地图在OpenStreetMap术语中也称为slippy地图。有两个免费的开源JavaScript地图库可用于tile服务器:OpenLayer和传单。传单的优点是使用简单,而且地图便于移动。 露天层 要使用OpenLayer显示你的slippy地图,请从OpenLayer下载JavaScript和CSS。组织并将其解压缩到webroot文件夹。 cd/var/www/sudo wgethttps://github.com/openlayers/openlayers/releases/download/v5.3.0/v5.3.0.zipsudo解压v5。3.0.拉链 接下来,创建索引。html文件。 sudo nano/var/www/index。html 在文件中粘贴以下HTML代码。替换红色文本,并根据需要调整经度、纬度和缩放级别。 <;!DOCTYPE html>&书信电报;html>&书信电报;头>&书信电报;meta charset=“UTF-8”大于&书信电报;标题>;无障碍地图</标题>&书信电报;link rel=“stylesheet”href=”http://tile.your-domain.com/v5.3.0/css/ol.css“type=“text/css”>;<;script src=”http://tile.your-domain.com/v5.3.0/build/ol.js“>;<;/script>;<;style>;a.skipling{位置:绝对;剪辑:rect(1px,1px,1px,1px);填充:0;边框:0;高度:1px;宽度:1px;溢出:隐藏;}”a、 skiplink:focus{clip:auto;height:auto;width:auto;background color:#fff;padding:0.3em;}#地图:焦点{轮廓:#4A74A8固体0.15em;}</风格></头>&书信电报;车身>&书信电报;a class=“skipling”href=“#map”>;转到地图</a>&书信电报;div id=“map”class=“map”tabindex=“0”></部门>&书信电报;按钮id=“缩小”>;缩小</按钮>&书信电报;按钮id=“放大”>;放大</按钮>&书信电报;脚本>;var map=新ol。Map({layers:[new ol.layer.Tile({source:new ol.source.OSM({url:'http://tile.your-domain.com/osm/{z} /{x}/{y}。png'})}),目标:'map',控件:ol。控制默认值({attributeoptions:/**@type{olx.control.attributeoptions}*/({collapsable:false})),视图:new ol。视图({center:[244780.245088823557386452.183179816],zoom:5});文件getElementById(“缩小”)。onclick=function(){var view=map.getView();var zoom=view.getZoom();view.setZoom(zoom-1);};文件getElementById(“放大”)。onclick=function(){var view=map.getView();var zoom=view.getZoom();view.setZoom(zoom+1);}</脚本></车身></html>; 保存并关闭文件。现在你可以通过在浏览器地址栏中输入你的子域来查看你的拖拉地图。 瓦片你的领域。通用域名格式 或 瓦片你的领域。com/index。html 传单 要使用Leftlet显示slippy地图,请从leftletjs下载JavaScript和CSS。com并将其解压缩到webroot文件夹。 cd/var/www/sudo wgethttp://cdn.leafletjs.com/leaflet/v1.7.1/leaflet.zipsudo解压传单。拉链 接下来,创建索引。html文件。 sudo nano/var/www/index。html 在文件中粘贴以下HTML代码。替换红色文本,并根据需要调整经度、纬度和缩放级别。 <;html>&书信电报;头>&书信电报;meta charset=“UTF-8”大于&书信电报;标题>;我的第一个osm</标题>&书信电报;link rel=“stylesheet”type=“text/css”href=“传单.css”/>&书信电报;script type=“text/javascript”src=“ployate.js”></脚本>&书信电报;风格>#地图{宽度:100%;高度:100%}</风格></头>&书信电报;车身>&书信电报;div id=“map”></部门>&书信电报;脚本>;var map=L.map('map')。setView([55,8],5);蒂莱莱耶http://tile.your-domain.com/osm/{z} /{x}/{y}。png',{maxZoom:18})。addTo(地图)</脚本></车身></html>; 保存并关闭文件。现在,您可以通过在浏览器中键入服务器IP地址来查看拖沓的地图。 瓦片你的领域。通用域名格式 或 瓦片你的领域。com/index。html 步骤12:预渲染瓷砖 动态渲染平铺将增加在web浏览器中加载地图的时间。要预渲染平铺而不是动态渲染,请使用以下render_list命令。使用-z和-z标志指定缩放级别,并根据服务器上的CPU内核数替换线程数。Render_list通过向渲染守护进程发送请求来渲染贴图分幅列表。预渲染的磁贴将缓存在/var/lib/mod_tile目录中。 render_list-m default-a-z 0-z 19--num threads=10 如果以后更新了贴图数据,可以使用--force选项再次预渲染所有分片。 render_list-m default-a-z 0-z 19--num threads=10--force 要在背景中渲染贴图分幅,请添加&;结尾的符号。 render_list-m default-a-z 0-z 19--num threads=10&; 现在你可以关闭终端窗口了。要检查呈现进度,请打开另一个SSH会话,然后运行以下命令。 sudo journalctl-欧盟趋势 上面的命令将显示renderd服务的最新日志。以下几行显示我的OSM服务器现在正在以缩放级别12渲染地图分幅。 renderd[20838]:调试:开始平铺默认值12 1008-1015 4056-4063,新metatile renderd[20838]:渲染投影坐标12 1008 4056->-10175297.205328 |-19724422.274944-10097025.688364 |-19646150.757980到一个8 x 8平铺渲染[20838]:调试:在0.799秒内完成平铺默认12 1008-1015 3984-3991渲染[20838]:调试:将协议版本2的渲染命令(3默认12/1008/3984)发送到fd 18渲染[20838]:调试:使用协议版本2 renderd[20838]获得传入请求:调试:获得命令RenderBulk fd(18)xml(默认),z(12),x(1008),y(4064),mime(图像/png),选项()渲染[20838]:调试:开始平铺默认值12 1008-1015 4064-4071,新metatile渲染[20838]:渲染投影坐标12 1008 4064->-10175297.205328 |-19802693.791908-10097025.688364 |-19724422.274944至8 x 8瓷砖 步骤13:启用HTTPS 为了加密HTTP流量,我们可以从Let's encrypt获得并安装免费的TLS证书。首先,在Debian 10上安装Let's Encrypt客户端(certbot)。 sudo apt安装certbot 因为我们使用的是ApacheWeb服务器,所以我们还需要安装Apache插件。 sudo apt安装python3 certbot apache 然后运行以下命令获取并安装TLS证书。 sudo certbot--apache--agree tos--redirect--hsts--stalke ocsp--must stalke--email[email ;protected]-d tile。你的领域。通用域名格式 安装证书后,刷新网页,您将在地址栏中看到一个锁。 如果你在Firefox地址栏中看到一个黄色的三角形,这意味着tile URL仍在使用HTTP。你需要编辑索引。html文件,并使用以下命令将所有HTTP协议替换为HTTPS。 sudo sed-i's/http/https/g'/var/www/index。html 步骤14:启用HTTP2 为了进一步提高映射加载性能,可以启用HTTP2协议。首先,需要启用HTTP2模块。 sudo a2enmod http2 然后打开SSL虚拟主机文件。 sudo nano/etc/apache2/sites enabled/tileserver_site-le-ssl。形态 在打开后放置以下指令<;VirtualHost*:443>;标签 协议h2 http/1.1 保存并关闭文件。然后重启Apache,使更改生效。 sudo systemctl重启apache2 使用HTTP Referrer标头限制对OSM磁贴服务器的访问 默认情况下,任何人都可以使用OpenLayer或传单创建一个带有tile服务器URL的滑动地图。要限制对tile服务器的访问,请编辑Apache虚拟主机文件。 sudo nano/etc/apache2/sites enabled/tileserver_site-le-ssl。形态 在<;VirtualHost>;标签。 <;位置/osm>;SetEnvIf Referer example/。com trusted_referer Order deny,allow deny from all allow from env=trusted_referer</地点>; 上面的代码检查HTTP referer头是否包含您自己的域。否则,将拒绝访问/osm目录。反斜杠用于转义点字符。要将多个主机名添加为受信任的引用程序,请使用以下语法。 SetEnvIf Referer(example/.com | www/.example/.com | map/.example/.com)可信的_Referer 保存并关闭文件。然后测试语法。 sudo apache2ctl-t 如果语法正确,请重新加载Apache以使更改生效。 sudo systemctl重新加载apache2 自动更新TLS证书 您可以创建Cron作业来自动续订TLS证书。只需打开root用户的crontab文件。 sudo crontab-e 在文件底部添加以下行。 @每日certbot更新——安静与&;systemctl重新加载apache2 不同主机上的PostgreSQL数据库和Web服务器 如果PostgreSQL和Apache web服务器位于不同的主机上,则需要编辑该项目。Apache主机上的mml文件。 nano/home/osm/openstreetmap-carto-4.20.0/project。嗯 找到以下几行: osm2pgsql:&;osm2pgsql类型:“postgis”dbname:“gis”键字段:“几何体”字段:“方式”范围:“-20037508,-200375082003750820037508” 指定PostgreSQL数据库服务器的IP地址。 osm2pgsql:&;osm2pgsql类型:“postgis”主机:“10.0.0.2”数据库名:“gis”键字段:“几何体”字段:“方式”范围:“-20037508,-200375082003750820037508” 保存并关闭文件。然后使用carto map样式表编译器构建Mapnik XML样式表。 carto项目。mml>;风格xml 在PostgreSQL数据库服务器上,编辑主配置文件。 sudo nano/etc/postgresql/11/main/postgresql。形态 添加以下行,将PostgreSQL设置为在所有接口上侦听。 听_addresses='*' 保存并关闭文件。然后编辑PostgreSQL客户端身份验证配置文件。 sudo nano/etc/postgresql/11/main/pg_hba。形态 在文件末尾添加以下行,以允许osm用户从Apache主机登录。将10.0.0.1替换为Apache主机的IP地址。 主机gis osm 10.0.0.1/32信任 保存并关闭文件。然后重新启动PostgreSQL。 sudo systemctl重启postgresql 在Apache主机上重新启动渲染守护程序。 sudo systemctl重新启动renderd 你需要查看renderd的日志。确保renderd不会在日志中产生任何错误,否则地图将不会显示。 sudo journalctl-欧盟趋势 还应限制对PostgreSQL数据库服务器端口5432的访问。例如,您可以使用以下UFW命令只允许Apache主机的IP地址。 sudo ufw允许从10.0.0.1进入任何端口5432 下一步 我希望本教程能帮助您在Debian 10上设置OpenStreetMap tile服务器。您可能还需要设置Namingm地理编码服务器以提供搜索功能。 在Debian 10上设置OSM Namingm地理编码服务器 和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?
-
在不带Docker的Ubuntu 18.04服务器上安装Mailtrain
本教程将向您展示如何在不使用Docker的情况下在Ubuntu18.04上安装Mailtrain。Mailtrain是一款开源的自托管通讯应用,是Mailchimp等商业电子邮件服务提供商的替代品。您可以使用Mailtrain通过自己的电子邮件服务器或任何SMTP中继服务(Mailjet、SendGrid、Amazons、Mailgun等)向电子邮件订户发送电子邮件。 Mailtrain是根据GPLv3的条款发布的。0许可证,建立在节点上。js和MySQL/MariaDB。最新版本是v1。24.1,于2018年9月28日发布。Mailtrain的特点如下: 它允许您轻松管理大型邮件列表(如100万订户)。 您可以通过API手动添加订阅服务器,或从CSV文件导入。 它支持自定义字段(文本字段、数字、下拉列表或复选框)、合并标记和自定义表单。 列表分割。 RSS活动:从RSS提要自动生成新闻稿并发送给订阅者。 订阅者可以上传他们的GPG公钥,Mailtrain将为他们加密时事通讯。 允许您检查每个链接的单个点击统计信息。 高级电子邮件模板编辑器和HTML代码编辑器。 自动化:当用户激活预定义的触发器时发送特定的电子邮件。 您可以创建打开的电子邮件列表(允许公开订阅)和关闭的电子邮件列表(管理员将订阅者添加到列表中)。 它允许您恢复旧电子邮件活动(将旧活动发送给新订户)。 先决条件 要运行Mailtrain,您需要一个至少有1GB内存的服务器。你可以点击这个特殊链接在DigitalOcean上获得50美元的免费积分。(仅限新用户使用)。如果您已经是DigitalOcean用户,那么您可以单击此特殊链接在Vultr上获得50美元的免费积分(仅限新用户)。一旦你在DigitalOcean或Vultr拥有了一个帐户,请在你的服务器上安装Ubuntu18.04,并按照以下说明操作。 你还需要有一个域名。我从NameCheap注册了我的域名,因为价格低廉,而且他们免费为whois提供隐私保护。 在不带Docker的Ubuntu 18.04上安装Mailtrain 在之前的教程中,我解释了如何使用Docker安装Mailtrain。Docker非常适合那些希望快速启动和运行应用程序的人,但它也非常需要资源。在使用Docker安装了Mailtrain的1GB内存的VPS上,MySQL容器通常会因为内存不足而关闭。所以我将向你们展示一种在Ubuntu18.04上安装Mailtrain的RAM友好方法,它可以节省大约400MB的内存。 注意:Mailtrain提供了一个安装脚本,但它可能已经过时,并且在执行安装脚本时可能会遇到错误。本教程解释了每个步骤,以便您了解其工作原理并安装。 步骤1:安装MariaDB数据库服务器 您的订阅者数据将存储在数据库中。Mailtrain支持MySQL和MariaDB。MariaDB是MySQL的替代品。它是由MySQL团队的前成员开发的,他们担心Oracle可能会将MySQL变成一个封闭源代码的产品。让我们安装MariaDB数据库服务器。 输入以下命令将其安装到Ubuntu 18.04上。 sudo apt安装mariadb服务器mariadb客户端 安装后,MariaDB服务器应自动启动。使用systemctl检查其状态。 系统控制状态 样本输出: ● 马里亚布。服务-MariaDB 10.1.34数据库服务器已加载:已加载(/lib/systemd/system/MariaDB.service;已启用;供应商预设:已启用)活动:自2018年9月8日11:13:27 UTC周六起活动(运行);21世纪前的文档:男:mysqld(8)https://mariadb.com/kb/en/library/systemd/主PID:3473(mysqld)状态:“立即处理SQL请求…”任务:27(限制:505)CGroup:/system。切片/切片。服务└─3473/usr/sbin/mysqld 如果未运行,请使用以下命令启动: sudo systemctl启动mariadb 要使MariaDB在系统启动时自动启动,请运行 sudo systemctl启用mariadb 现在运行安装后安全脚本。 sudo mysql_安全安装 当它要求您输入根密码时,请按enter键,因为根密码尚未设置。然后输入y设置MariaDB服务器的根密码。 接下来,您可以按Enter键回答所有剩余的问题,这将删除匿名用户、禁用远程根登录并删除测试数据库。这一步是MariaDB数据库安全的基本要求。(请注意,字母Y大写,这意味着它是默认答案。) 检查MariaDB服务器版本信息。 mariadb——版本 输出: mariadb版本15.1发行版10.1.34-mariadb,适用于使用readline 5.2的debian linux gnu(x86_64) 步骤2:为Mailtrain创建数据库和用户 现在我们需要登录到MariaDB控制台,为Mailtrain创建一个数据库和用户。默认情况下,Ubuntu上的MaraiDB包使用unix_socket对用户登录进行身份验证,这基本上意味着您可以使用操作系统的用户名和密码登录到MariaDB控制台。因此,您可以运行以下命令登录,而无需提供MariaDB root密码。 sudo mariadb-u根 使用以下命令为Mailtrain创建数据库。我给它取名为mailtrain,但你可以用任何你喜欢的名字。(不要漏掉分号。) 创建数据库mailtrain; 然后输入下面的命令,为Mailtrain创建数据库用户,并将Mailtrain数据库的所有权限授予该用户。将mtuser和密码替换为首选用户名和密码。 授予mailtrain上的所有特权。*到mtuser@localhost由“mtuser_密码”标识; 接下来,创建一个对mailtrain数据库具有只读访问权限的用户。我把这个用户命名为mt_readonly。 在mailtrain上授予选择权。*去山_readonly@localhost由“mt_只读_密码”标识; 刷新特权表以使更改生效,然后退出MariaDB控制台。 同花顺特权;出口 步骤3:安装节点。js Mailtrain构建在节点上。js,这是一个JavaScript运行时环境,可以将人类可读的JavaScript代码转换为机器代码。所以我们需要安装Node。在Ubuntu 18.04上运行js以运行Mailtrain。Mailtrain需要节点。JS7+。本教程将安装Node的当前LTS版本。来自NodeSource存储库的js(V8.x)。 curl-sLhttps://deb.nodesource.com/setup_8.x| sudo-E bash-sudo apt install-y nodejs 注:节点的最新LTS版本。js现在是v12,但它不适用于Mailtrain v1。24.1. nodejs包包含npm(Node.js package manager)二进制文件,因此无需单独安装。检查你的节点。js和npm版本,运行 node-v npm-v 输出: 要从npm编译和安装本机插件,还需要安装构建工具: sudo apt安装-y构建必不可少 第4步:运行Mailtrain 转到/var/www/并从Github获取Mailtrain文件。 cd/var/www/sudo git clonehttps://github.com/Mailtrain-org/mailtrain.git 使用以下命令将初始SQL数据导入mailtrain数据库。您需要输入mtuser的密码。 mariadb-u mtuser-p mailtrain</var/www/mailtrain/setup/sql/mailtrain。sql 创建产品。toml配置文件。 sudo nano/var/www/mailtrain/config/production。汤姆 在该文件中,可以添加覆盖/var/www/mailtrain/config/default中默认配置的配置。toml文件。我们只需要添加以下配置。 user=“mailtrain”group=“mailtrain”[log]level=“error”[www]secret=“将其替换为一些随机字符”[mysql]user=“mtuser”password=“mtuseru password”[queue]processes=5 保存并关闭文件。然后创建mailtrain用户和组,以便mailtrain守护程序作为其运行。注意,我们不需要为这个用户创建密码,所以我们创建一个系统用户而不是普通用户。 sudo adduser--系统--组邮件列车 为报表工作程序创建配置文件。 sudo nano/var/www/mailtrain/workers/reports/config/production。汤姆 添加以下配置。此报表工作程序将对mailtrain数据库具有只读访问权限。 [log]level=“error”[mysql]user=“mt_readonly”password=“mt_readonly_password” 保存并关闭文件。然后更改/var/www/mailtrain/的权限。 sudo chown mailtrain:mailtrain/var/www/mailtrain/-R sudo chmod o-rwx/var/www/mailtrain/config/ 并安装所需的节点包。 cd/var/www/mailtrain sudo npm安装--无进展--生产--不安全perm=true 将systemd服务单元文件复制到/etc/systemd/system/目录。 sudo cp/var/www/mailtrain/setup/mailtrain。服务/etc/systemd/system/ 打开这个文件。 sudo nano/etc/systemd/system/mailtrain。服务 将/opt/mailtrain更改为/var/www/mailtrain。你可能还想注释掉下面这行。因为,在启用以下行的情况下,如果MySQL/MariaDB重新启动,那么mailtrain。服务也将重新启动,如果MySQL/MariaDB服务器正在升级,则mailtrain。服务将停止。我认为不需要mysql。服务 Requires=mysql。服务 保存并关闭此文件。然后启动邮车。服务 sudo systemctl启动邮件列车。服务 检查它的状态。确保它正在运行。 sudo systemctl状态邮件列车。服务 在系统启动时启用自动启动。 sudo systemctl启用邮件列车。服务 现在Mailtrain正在运行,您可以通过端口3000访问Mailtrain web界面。 你的服务器ip:3000 第5步:设置反向代理并启用HTTPS 在使用Mailtrain web界面之前,我们先将其置于Nginx之后,然后启用HTTPS。在Ubuntu18.04上安装Nginx web服务器,安装方式如下: sudo apt安装nginx 现在,您可以复制示例mailtrain nginx。conf文件到/etc/nginx/conf.d/目录。 sudo cp/var/www/mailtrain/setup/mailtrain nginx。conf/etc/nginx/conf.d/ 打开这个文件。 sudo nano/etc/nginx/conf.d/mailtrain-nginx。形态 找到下面这行。 服务器名为mailtrain。org www.mailtrain。组织; 将server_name参数的值更改为您自己的域名,如新闻稿。你的领域。通用域名格式。别忘了为这个子域创建一个A记录。 服务器名称通讯。利努克斯宝贝。通用域名格式; 保存并关闭文件。然后测试Nginx配置。 sudo nginx-t 如果测试成功,请重新加载Nginx以使更改生效。 sudo systemctl重新加载nginx 你现在应该可以通过你的子域名:时事通讯访问Mailtrain web界面。你的领域。通用域名格式。 现在编辑/var/www/mailtrain/config/production。toml文件。 sudo nano/var/www/mailtrain/config/production。汤姆 在[www]部分,添加以下两行,以指示mailtrain位于Nginx代理的后面,并使其仅侦听本地主机地址。 host=“127.0.0.1”proxy=true 保存并关闭文件。然后重新启动Mailtrain,使更改生效。 sudo systemctl重启邮件列车 第6步:使用Let's Encrypt启用HTTPS 在你的Ubuntu 18.04服务器上安装Let's Encrypt client(certbot)。 sudo-apt-install-software-properties通用sudo-add-apt-repository-ppa:certbot/certbot-sudo-apt-install-certbot-python3-certbot-nginx 然后,通过执行以下命令,您可以使用Nginx插件自动获取并安装TLS证书。 sudo certbot--nginx--agree tos--redirect--hsts--StapleOCSP--email address--d时事通讯。你的领域。通用域名格式 现在,您可以通过域名和安全的HTTPS连接访问Mailtrain web界面。 htop命令告诉我,我的服务器正在使用大约500MB的RAM。如果我和Docker一起运行Mailtrain,大约是900MB。 使用用户名admin和密码test登录。然后更改您的帐户电子邮件地址和密码。转到“设置”页面以更改默认配置。你应该把服务地址从http://localhost:3000/到你的子域(https://newsletter.your-domain.com). 注意:管理员帐户很容易成为黑客攻击的目标。为了获得最佳安全性,建议您将用户名从admin更改为其他名称。Mailtrain web界面不提供此类选项,但您可以使用SQL命令更改MariaDB数据库中的用户名。 在邮件设置中,如果您有自己的电子邮件服务器或使用亚马逊SES,则可以使用SMTP。实际上,您也可以在SMTP选项卡中使用其他SMTP中继服务。在下面的截图中,我使用自己的电子邮件服务器。电子邮件将通过STARTTLS加密在587端口提交。 如果邮件服务器上安装了Mailtrain,则应使用以下SMTP设置。主机名应该是127.0.0.1,端口应该是25。与本地主机通话时,无需启用加密或身份验证。 保存你的设置。然后你可以创建一个列表来测试Mailtrain的功能。 如何处理Mailtrain中的跳转消息 你的邮件列表迟早会包含你无法发送邮件的地址。例如,当使用公司电子邮件地址的订户离开公司时,该电子邮件地址将被删除。因此,您的电子邮件服务器将收到弹出消息,表示无法发送电子邮件。 如果您使用SMTP中继服务发送电子邮件,他们将为您处理跳转邮件。如果您使用自己的电子邮件服务器发送电子邮件,那么您需要在Mailtrain中处理跳转邮件。Mailtrain提供了两种处理跳转邮件的方法。 维亚维尔 通过后缀日志 我个人使用VERP方法,因为它在电子邮件社区中被广泛使用,也因为第二种方法导致我的服务器上CPU使用率很高。 VERP弹跳处理 使用VERP(可变信封返回路径),您的电子邮件列表管理器为每个订阅者使用唯一的信封地址。要启用VERP,请编辑产品。toml文件。 sudo nano/var/www/mailtrain/config/production。汤姆 如果您的Mailtrain主机没有运行SMTP服务器,请添加以下文本。 [verp]enabled=true端口=25 disablesenderheader=true 如果您的Mailtrain服务器正在运行类似Postfix的SMTP服务器,请添加以下文本。弹跳处理服务器将监听127.0.0.1:2525。 [verp]enabled=true port=2525 host=“127.0.0.1”disablesenderheader=true 保存并关闭文件。然后重新启动Mailtrain,使更改生效。 sudo systemctl重启邮件列车 在Mailtrain web界面中,进入设置->;维普·邦斯·汉德丁。选中“使用VERP捕捉反弹”。保存你的设置。 接下来,您需要为服务器主机名(bounces.your domain.com)创建一个MX记录,然后为这个主机名添加一个记录,指向您的Mailtrain主机,这样可以将跳转消息发送到您的Mailtrain主机。您列表中的每个订户都有一个唯一的信封地址,如[email ;protected]。 请注意,如果为域名部署了DMARC记录,则SPF对齐必须设置为放松模式。如果设置为严格模式,则您的新闻稿可能无法通过DMARC检查。 如果Mailtrain bounce handling server正在监听127.0.0.1的端口2525,而Postfix SMTP server正在监听公共IP地址的端口25,那么您需要设置传输映射,以便Postfix可以将bounce消息中继到Mailtrain。创建传输映射文件。 sudo nano/etc/postfix/transport 将以下行添加到此文件。这会告诉Postfix将地址为[email ;protected]的电子邮件转发到Mailtrain弹跳处理服务器。 反弹。你的领域。com smtp:[127.0.0.1]:2525 保存并关闭文件。然后生成索引文件。 sudo postmap/etc/postfix/transport 编辑后缀主配置文件。 sudo nano/etc/postfix/main。查阅 将以下行添加到文件中。 传输映射=散列:/etc/postfix/transport 注意:如果使用iRedMail设置邮件服务器,则transport_maps参数还有一些其他值。您应该像下面那样在末尾附加值。 transportu maps=proxy:mysql:/etc/postfix/mysql/transportu mapsu user。cf proxy:mysql:/etc/postfix/mysql/transportu mapsu邮件列表。cf proxy:mysql:/etc/postfix/mysql/transportu mapsu domain。cf hash:/etc/postfix/transport 保存并关闭文件。然后重新启动Postfix以使更改生效。 sudo systemctl重启后缀 通过Postfix日志处理跳转邮件 这假设Mailtrain安装在您的电子邮件服务器上。 Mailtrain能够通过查找包含status=Bounched的行,从Postfix邮件日志中检测被反弹的邮件。首先,需要启用Postfix日志读取服务器。编辑制作。toml文件。 sudo nano/var/www/mailtrain/config/production。汤姆 添加以下文本。 [postfixbounce]已启用=真 保存并关闭文件。然后重新启动Mailtrain,使更改生效。 sudo systemctl重启邮件列车 现在Postfix日志读取服务器正在监听127.0.0.1:5699。要让它读取后缀日志,请运行以下命令。 tail-F/var/log/mail。日志| nc本地主机5699- 要使其在后台运行,可以创建一个systemd服务单元。 sudo nano/etc/systemd/system/bouncetail。服务 添加以下文本。 [Unit]Description=Postfix bounce notifier After=mailtrain。服务[service]ExecStart=/bin/sh-c'/usr/bin/tail-F/var/log/mail。log | nc localhost 5699-'Type=simple Restart=always RestartSec=10[Install]WantedBy=multi-user。目标 保存并关闭文件。然后启动此服务,并在启动时启用自动启动。 sudo systemctl start bouncetail sudo systemctl enable bouncetail 请确保在重新启动mailtrain服务后重新启动bouncetail服务。我发现bouncetail服务在我的服务器上会导致高CPU使用率,所以我不使用这种方法。 使现代化 在我自己的服务器上使用Mailtrain一段时间后,我发现它们是导致电子邮件反弹的其他原因。以下是软反弹。 收件人的邮箱已满。 你的IP地址在黑名单上。 收件人电子邮件服务器已关闭或脱机。 还有硬反弹,即收件人的电子邮件地址不存在。默认情况下,如果检测到一个跳转,Mailtrain将取消订阅一个电子邮件地址,这对于硬跳转来说很好,但在取消订阅坏的电子邮件地址之前,最好允许几个软跳转。您可以要求接收电子邮件的服务器从黑名单中删除您的IP地址,然后重新订阅相关的电子邮件地址。 在Mailtrain中上传图像 要在Mailtrain中上载图像,需要安装imagemagick软件包。如果没有它,Mailtrain在上传图像时可能会抛出错误。 sudo apt安装imagemagick 如何在网站上插入注册表格 首先,您需要启用跨源资源共享。编辑制作。toml文件。 sudo nano/var/www/mailtrain/config/production。汤姆 在文件中添加以下行以将您的网站列入白名单。 [cors]#允许订阅小部件嵌入源=['https://www.example.com'] 保存并关闭文件。然后重新启动Mailtrain,使更改生效。 sudo systemctl重启邮件列车 接下来,在网站上添加以下代码以显示注册表单。将红色文本替换为Mailtrain域名和您自己的列表ID。 <;div data mailtrain订阅小部件数据url=”https://newsletter.example.com/subscription/8ljDT9KMGr/widget“>;<;a href=”https://newsletter.example.com/subscription/8ljDT9KMGr“>;订阅我们的列表<;/a>;<;/div>;<;脚本src=”https://newsletter.example.com/subscription/widget.js“>;<;/script>; 然后添加自定义CSS规则,使其更具视觉吸引力。 如何在Mailtrain中创建其他用户 Mailtrain v2将允许管理员创建多个具有精细用户权限和灵活共享的用户。但在当前版本v.1.24.1中,只能通过数据库创建用户。登录MySQL/MariaDB控制台。 sudo mysql-u root 使用mailtrain数据库。 使用邮车; 如何在注册表格中插入选项 如果您想在注册表单上为访客提供选项供其选择,则需要创建自定义字段。转到列表,在“列表操作”下拉菜单中选择“自定义字段”,然后创建自定义字段。 首先,需要创建一个字段,该字段将成为选项列表的标题问题。在“字段类型”中,可以选择单选按钮(单选)或复选框(多选)。在组中,不要选择任何内容,因为此字段将成为选项的组。 然后为每个选项创建自定义字段。您需要为字段类型中的组值选择选项,并在组中选择上一个自定义字段名。 如何更改字段类型 默认情况下,Mailtrain web界面不允许您更改字段类型,但您可以在Mailtrain数据库中更改它。例如,我需要将字段类型从复选框更改为单选按钮。 我建议在更改数据库中的任何内容之前备份数据库。您可以运行以下命令来备份mailtrain数据库。 sudo mysqldump-u root mailtrain>;邮车。sql 然后登录MariaDB数据库服务器。 sudo mysql-u root 使用mailtrain数据库。 使用邮车; 所有自定义字段都存储在自定义字段表中。您可以通过以下方式查看其内容: 从自定义_字段中选择*; 找到要修改的自定义字段,并运行以下SQL命令更改其类型。用你自己的身份证号码替换身份证号码。 更新自定义_字段集type='radio',其中id=3; 退出数据库服务器。 出口 如何在Mailtrain中清理电子邮件列表 未授权的订阅者不会为你赚钱,因为他们不会打开你的电子邮件,邮箱提供商会降低你的域名声誉。为了确保你未来的邮件进入收件箱,你应该从邮件列表中删除未注册的订阅者。 你可以为过去60天内没有打开你的电子邮件的人创建一个段,然后删除他们的电子邮件地址。该部分的规则如下: 收尾 我希望本教程能帮助你在Ubuntu18.04上安装Mailtrain。您可以访问Mailtrain wiki以查找有关使用Mailtrain的更多信息。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心。 在不带Docker的Ubuntu 18.04服务器上安装Mailtrain DELETE FROM subscription__1 where status = '2'; DELETE FROM subscription__2 where status = '2'; To exit MySQL/MariaDB database server, run exit; Now open the root user’s crontab file. sudo crontab -e Add the following two lines. # Delete unsubscribed email addresses from mailing list daily @daily /usr/bin/mysql -u root mailtrain -Bse "DELETE FROM subscription__1 where status = '2';DELETE FROM subscription__2 where status = '2';" Save and close the file. And you’re done. How to Export Your Email Lists in Mailtrain There’s no export button in the Mailtrain admin panel. However, if you have installed phpMyAdmin on the server, you can export your email lists from there. Select the mailtrain database in phpMyAdmin, then select the table that stores your email lists. In my case, the subscription__1 and subscription__2 tables store subscribers’ information. Then click the export button to save the table as a file. Note that there are 2 export buttons. You need to click the second export button to export the entire table. The first export button will only export the current visible records in the table. Next, you can choose the file format for the export file. Finally, click the Go button. How to Hide the Mailtrain Home Page If you don’t want visitors to see your mailtrain home page, you can set up a 301 permanent redirect to redirect visitors to your website’s home page, by adding the following code in Mailtrain’s Nginx configuration file. location = / { return 301 http://www.your-domain.com; } Save and close the file. Then reload Nginx for the change to take effect. sudo systemctl reload nginx You need to remember the Mailtrain login URL. https://newsletter.your-domain.com/users/login By default, the login button will redirect you to the Mailtrain home page, so you need to remember another URL. https://newsletter.your-domain.com/lists This allows you to manage your lists and other stuff in the dashboard. How to Insert Options on the Signup Form If you want to give options on the signup form for the visitor to select, then you need to create custom fields. Go to your list and select custom fields in the List Actions drop-down menu and create custom field. First, you need to create a field that will become the header question for the option list. In Field Type, you can select radio button (for single choice) or checkboxes (for multiple choices). In Group, don’t select anything, because this field will become a group for the options. Then create custom field for each option. You need to choose option for a group value in Field Type, and choose the previous custom filed name in Group. How to Change Field Type By default, the Mailtrain web interface doesn’t allow you to change filed type, but you can change it in the mailtrain database. For example, I need to change a field type from checkboxes to radio button. I recommend backing up the database before changing anything in the database. You can run the following command to backup mailtrain database. sudo mysqldump -u root mailtrain > mailtrain.sql Then log into MariaDB database server. sudo mysql -u root Use the mailtrain database. USE mailtrain; All custom fields are stored in the custom_fields table. You can check its content with: SELECT * FROM custom_fields; Find the custom field you want to modify and run the following SQL command to change its type. Replace the id number with your own. UPDATE custom_fields SET type = 'radio' Where id = 3; Exit the database server. EXIT; How to Clean Your Email List in Mailtrain Unengaged subscribers won’t make you money and because they don’t open your email, mailbox providers will reduce your domain reputation. To make sure your future email will get into the inbox, you should remove unengaged subscribers from your email list. You can create a segment for people who didn’t open your email in the last 60 days, then delete their email addresses. The rule for this segment is as follows: Wrapping Up I hope this tutorial helped you install Mailtrain on Ubuntu 18.04. You can go to Mailtrain wiki to find more information on using Mailtrain. As always, if you found this post useful, then subscribe to our free newsletter to get more tips and tricks. Take care.
-
在Ubuntu 16.04服务器上安装Mailtrain自托管通讯应用程序
本教程将向您展示如何在Ubuntu 16.04服务器上安装Mailtrain。Mailtrain是一款开源的自托管通讯应用,是Mailchimp等商业电子邮件服务提供商的替代品。您可以使用Mailtrain通过自己的电子邮件服务器或任何SMTP中继服务(Mailjet、SendGrid、Amazons、Mailgun等)向电子邮件订户发送电子邮件。 Mailtrain是根据GPLv3的条款发布的。0许可证,建立在节点上。js和MySQL/MariaDB。最新版本是v1。24.1,于2018年9月28日发布。Mailtrain的特点如下: 它允许您轻松管理大型邮件列表(如100万订户)。 您可以通过API手动添加订阅服务器,或从CSV文件导入。 它支持自定义字段(文本字段、数字、下拉列表或复选框)、合并标记和自定义表单。 列表分割。 RSS活动:从RSS提要自动生成新闻稿并发送给订阅者。 订阅者可以上传他们的GPG公钥,Mailtrain将为他们加密时事通讯。 允许您检查每个链接的单个点击统计信息。 高级电子邮件模板编辑器和HTML代码编辑器。 自动化:当用户激活预定义的触发器时发送特定的电子邮件。 您可以创建打开的电子邮件列表(允许公开订阅)和关闭的电子邮件列表(管理员将订阅者添加到列表中)。 在Ubuntu 16.04服务器上安装Mailtrain的先决条件 要运行Mailtrain,您需要一个至少有1GB内存的服务器。你可以点击这个特殊链接在DigitalOcean上获得100美元的免费积分。(仅限新用户使用)。如果您已经是DigitalOcean用户,那么您可以单击此特殊链接在Vultr上获得50美元的免费积分(仅限新用户)。一旦你在DigitalOcean或Vultr拥有了一个帐户,请在你的服务器上安装Ubuntu 16.04,并按照以下说明操作。 你还需要有一个域名。我从NameCheap注册了我的域名,因为价格低廉,而且他们免费为whois提供隐私保护。 步骤1:安装MariaDB数据库服务器 您的订阅者数据将存储在数据库中。Mailtrain支持MySQL和MariaDB。MariaDB是MySQL的替代品。它是由MySQL团队的前成员开发的,他们担心Oracle可能会将MySQL变成一个封闭源代码的产品。让我们安装MariaDB数据库服务器。 输入以下命令将其安装到Ubuntu 16.04上。 sudo apt安装mariadb服务器mariadb客户端 安装后,MariaDB服务器应自动启动。使用systemctl检查其状态。 systemctl状态mysql 样本输出: ● 马里亚布。服务-MariaDB 10.1.34数据库服务器已加载:已加载(/lib/systemd/system/MariaDB.service;已启用;供应商预设:已启用)活动:自2018年9月8日11:13:27 UTC周六起活动(运行);21世纪前的文档:男:mysqld(8)https://mariadb.com/kb/en/library/systemd/主PID:3473(mysqld)状态:“立即处理SQL请求…”任务:27(限制:505)CGroup:/system。切片/切片。服务└─3473/usr/sbin/mysqld 如果未运行,请使用以下命令启动: sudo systemctl启动mysql 要使MariaDB在系统启动时自动启动,请运行 sudo systemctl启用mysql 现在运行安装后安全脚本。 sudo mysql_安全安装 当它要求您输入根密码时,请按enter键,因为根密码尚未设置。然后输入y设置MariaDB服务器的根密码。 接下来,您可以按Enter键回答所有剩余的问题,这将删除匿名用户、禁用远程根登录并删除测试数据库。这一步是MariaDB数据库安全的基本要求。(请注意,字母Y大写,这意味着它是默认答案。) 步骤2:为Mailtrain创建数据库和用户 现在我们需要登录到MariaDB控制台,为Mailtrain创建一个数据库和用户。默认情况下,Ubuntu上的MaraiDB包使用unix_socket对用户登录进行身份验证,这基本上意味着您可以使用操作系统的用户名和密码登录到MariaDB控制台。因此,您可以运行以下命令登录,而无需提供MariaDB root密码。 sudo mysql-u root 使用以下命令为Mailtrain创建数据库。我给它取名为mailtrain,但你可以用任何你喜欢的名字。(不要漏掉分号。) 创建数据库mailtrain; 然后输入下面的命令,为Mailtrain创建数据库用户,并将Mailtrain数据库的所有权限授予该用户。将mtuser和密码替换为首选用户名和密码。 授予mailtrain上的所有特权。*到mtuser@localhost由“mtuser_密码”标识; 接下来,创建一个对mailtrain数据库具有只读访问权限的用户。我把这个用户命名为mt_readonly。 在mailtrain上授予选择权。*去山_readonly@localhost由“mt_只读_密码”标识; 刷新特权表以使更改生效,然后退出MariaDB控制台。 同花顺特权;出口 步骤3:安装节点。js Mailtrain构建在节点上。js,这是一个JavaScript运行时环境,可以将人类可读的JavaScript代码转换为机器代码。所以我们需要安装Node。在Ubuntu 16.04上运行js以运行Mailtrain。Mailtrain需要节点。JS7+。本教程将安装Node的当前LTS版本。来自NodeSource存储库的js(V8.x)。 curl-sLhttps://deb.nodesource.com/setup_8.x| sudo-E bash-sudo apt install-y nodejs nodejs包包含npm(Node.js package manager)二进制文件,因此无需单独安装。检查你的节点。js和npm版本,运行 node-v npm-v 输出: 要从npm编译和安装本机插件,还需要安装构建工具: sudo apt安装-y构建必不可少 第4步:运行Mailtrain 转到/var/www/并从Github获取Mailtrain文件。 cd/var/www/sudo git clonehttps://github.com/Mailtrain-org/mailtrain.git 使用以下命令将初始SQL数据导入mailtrain数据库。您需要输入mtuser的密码。 mysql-u mtuser-p mailtrain</var/www/mailtrain/setup/sql/mailtrain。sql 创建产品。toml配置文件。 sudo nano/var/www/mailtrain/config/production。汤姆 在该文件中,可以添加覆盖/var/www/mailtrain/config/default中默认配置的配置。toml文件。我们只需要添加以下配置。 user=“mailtrain”group=“mailtrain”[log]level=“error”[www]secret=“将其替换为一些随机字符”[mysql]user=“mtuser”password=“mtuseru password”[queue]processes=5 保存并关闭文件。然后创建mailtrain用户和组,以便mailtrain守护程序作为其运行。注意,我们不需要为这个用户创建密码,所以我们创建一个系统用户而不是普通用户。 sudo adduser--系统--组邮件列车 为报表工作程序创建配置文件。 sudo nano/var/www/mailtrain/workers/reports/config/production。汤姆 添加以下配置。此报表工作程序将对mailtrain数据库具有只读访问权限。 [log]level=“error”[mysql]user=“mt_readonly”password=“mt_readonly_password” 保存并关闭文件。然后更改/var/www/mailtrain/的权限。 sudo chown mailtrain:mailtrain/var/www/mailtrain/-R sudo chmod o-rwx/var/www/mailtrain/config/ 并安装所需的节点包。 cd/var/www/mailtrain sudo npm安装--无进展--生产--不安全perm=true 将systemd服务单元文件复制到/etc/systemd/system/目录。 sudo cp/var/www/mailtrain/setup/mailtrain。服务/etc/systemd/system/ 打开这个文件。 sudo nano/etc/systemd/system/mailtrain。服务 因为我们将Mailtrain下载到了/var/www/Mailtrain/directory,所以将工作目录从/opt/Mailtrain更改为/var/www/Mailtrain。保存并关闭此文件。然后启动邮车。服务 sudo systemctl启动邮件列车。服务 在系统启动时启用自动启动。 sudo systemctl启用邮件列车。服务 检查它的状态。确保它正在运行。如果输出显示激活(自动重启),则只需等待几分钟,Mailtrain即可启动。 sudo systemctl状态邮件列车。服务 现在Mailtrain正在运行,您可以通过端口3000访问Mailtrain web界面。 你的服务器ip:3000 设置反向代理并启用HTTPS 在使用Mailtrain web界面之前,我们先将其置于Nginx之后,然后启用HTTPS。在Ubuntu16.04上安装Nginx web服务器,安装方式如下: sudo apt安装nginx 现在,您可以复制示例mailtrain nginx。conf文件到/etc/nginx/conf.d/目录。 sudo cp/var/www/mailtrain/setup/mailtrain nginx。conf/etc/nginx/conf.d/ 打开这个文件。 sudo nano/etc/nginx/conf.d/mailtrain-nginx。形态 找到下面这行。 服务器名为mailtrain。org www.mailtrain。组织; 将server_name参数的值更改为您自己的域名,如新闻稿。你的领域。通用域名格式。别忘了为这个子域创建一个A记录。 服务器名称通讯。利努克斯宝贝。通用域名格式; 保存并关闭文件。然后测试Nginx配置。 sudo nginx-t 如果测试成功,请重新加载Nginx以使更改生效。 sudo systemctl重新加载nginx 你现在应该可以通过你的子域名:时事通讯访问Mailtrain web界面。你的领域。通用域名格式。 现在编辑/var/www/mailtrain/config/production。toml文件。 sudo nano/var/www/mailtrain/config/production。汤姆 在[www]部分,添加以下两行,以指示mailtrain位于Nginx代理的后面,并使其仅侦听本地主机地址。 host=“127.0.0.1”proxy=true 保存并关闭文件。然后重新启动Mailtrain,使更改生效。 sudo systemctl重启邮件列车 使用Let's Encrypt启用HTTPS 在你的Ubuntu 16.04服务器上安装Let's Encrypt client(certbot)。 sudo-apt-install-software-properties通用sudo-add-apt-repository-ppa:certbot/certbot-sudo-apt-update sudo-apt-install-certbot-python3 certbot-nginx 然后,通过执行以下命令,您可以使用Nginx插件自动获取并安装TLS证书。 sudo certbot--nginx--agree tos--redirect--hsts--StapleOCSP--email address--d时事通讯。你的领域。通用域名格式 现在,您可以通过域名和安全的HTTPS连接访问Mailtrain web界面。 使用用户名admin和密码test登录。然后更改您的帐户电子邮件地址和密码。转到“设置”页面以更改默认配置。你应该把服务地址从http://localhost:3000/到你的子域(https://newsletter.your-domain.com). 注意:管理员帐户很容易成为黑客攻击的目标。为了获得最佳安全性,建议您将用户名从admin更改为其他名称。Mailtrain web界面不提供此类选项,但您可以使用SQL命令更改MariaDB数据库中的用户名。 在邮件设置中,如果您有自己的电子邮件服务器或使用亚马逊SES,则可以使用SMTP。实际上,您也可以在SMTP选项卡中使用其他SMTP中继服务。在下面的截图中,我使用自己的电子邮件服务器。电子邮件将通过STARTTLS加密在587端口提交。 保存你的设置。然后你可以创建一个列表来测试Mailtrain的功能。 如何处理Mailtrain中的跳转消息 你的邮件列表迟早会包含你无法发送邮件的地址。例如,当使用公司电子邮件地址的订户离开公司时,该电子邮件地址将被删除。因此,您的电子邮件服务器将收到弹出消息,表示无法发送电子邮件。 如果您使用SMTP中继服务发送电子邮件,他们将为您处理跳转邮件。如果您使用自己的电子邮件服务器发送电子邮件,那么您需要在Mailtrain中处理跳转邮件。Mailtrain提供了两种处理跳转邮件的方法。 维亚维尔 通过后缀日志 我个人使用VERP方法,因为它在电子邮件社区中被广泛使用,也因为第二种方法导致我的服务器上CPU使用率很高。 VERP弹跳处理 使用VERP(可变信封返回路径),您的电子邮件列表管理器为每个订阅者使用唯一的信封地址。要启用VERP,请编辑产品。toml文件。 sudo nano/var/www/mailtrain/config/production。汤姆 如果您的Mailtrain主机没有运行SMTP服务器,请添加以下文本。 [verp]enabled=true端口=25 disablesenderheader=true 如果您的Mailtrain服务器正在运行类似Postfix的SMTP服务器,请添加以下文本。弹跳处理服务器将监听127.0.0.1:2525。 [verp]enabled=true port=2525 host=“127.0.0.1”disablesenderheader=true 保存并关闭文件。然后重新启动Mailtrain,使更改生效。 sudo systemctl重启邮件列车 在Mailtrain web界面中,进入设置->;维普·邦斯·汉德丁。选中“使用VERP捕捉反弹”。保存你的设置。 接下来,您需要为服务器主机名(bounces.your domain.com)创建一个MX记录,然后为这个主机名添加一个记录,指向您的Mailtrain主机,这样可以将跳转消息发送到您的Mailtrain主机。您列表中的每个订户都有一个唯一的信封地址,如[email ;protected]。 请注意,如果为域名部署了DMARC记录,则SPF对齐必须设置为放松模式。如果设置为严格模式,您的新闻稿可能无法通过DMARC检查。 如果Mailtrain bounce handling server正在监听127.0.0.1的端口2525,而Postfix SMTP server正在监听公共IP地址的端口25,那么您需要设置传输映射,以便Postfix可以将bounce消息中继到Mailtrain。创建传输映射文件。 sudo nano/etc/postfix/transport 将以下行添加到此文件。这会告诉Postfix将地址为[email ;protected]的电子邮件转发到Mailtrain弹跳处理服务器。 反弹。你的领域。com smtp:[127.0.0.1]:2525 保存并关闭文件。然后生成索引文件。 sudo postmap/etc/postfix/transport 编辑后缀主配置文件。 sudo nano/etc/postfix/main。查阅 将以下行添加到文件中。 传输映射=散列:/etc/postfix/transport 保存并关闭文件。然后重新启动Postfix以使更改生效。 sudo systemctl重启后缀 Cron作业自动清除未订阅的电子邮件地址 您可以在Mailtrain基于web的管理面板中手动删除未订阅的电子邮件地址,但使用MySQL/MariaDB命令删除它们要高效得多,然后您只需创建一个Cron作业来自动执行此任务。 首先,登录MySQL/MariaDB数据库服务器。 sudo mysql-u root 然后连接到mailtrain数据库。 使用邮车; 订阅者的信息存储在订阅表中。如果您有多个邮件列表,那么您将有多个订阅表。可以使用以下SQL命令列出所有这些表。 显示“订阅%”等表格; 在我的服务器上输出。 +-------------------------------------+|表|u in|u mailtrain(订阅%|+---------------------------------------|订阅|订阅|订阅| 1 |订阅| 2 |+-------------------------------------+ 第一张桌子是空的。我在Mailtrain上有两个列表。它们存储在subscription__1和subscription__2表中。订阅的电子邮件地址的状态代码设置为1。未订阅的电子邮件地址的状态代码设置为2。因此,要删除未订阅的电子邮件地址,可以运行以下SQL命令。 从订阅__1中删除,其中状态为'2';从订阅__2中删除,其中状态为'2'; 要退出MySQL/MariaDB数据库服务器,请运行 出口 现在打开根用户的crontab文件。 sudo crontab-e 添加以下两行。 #从邮件列表daily@daily/usr/bin/mysql-u root mailtrain-Bse中删除未订阅的电子邮件地址“从订阅中删除,其中状态为'2';从订阅中删除,其中状态为'2' 保存并关闭文件。你完了。 处理恶意注册 有些人除了使用虚假的电子邮件地址注册你的电子邮件列表之外什么都不用做,因此注册确认电子邮件将发送到虚假的电子邮件地址,你可能会在收件箱中收到未送达的电子邮件报告。 您可以使用诸如roundcube之类的webmail创建一个过滤器,该过滤器会自动删除此类电子邮件。在下面的屏幕截图中,你可以看到我创建了一个过滤器,如果 主题包含“退回给发件人的未送达邮件” 未送达的邮件报告被发送到我的地址。 正文包含“请确认订阅”。(因为注册确认邮件中包含这句话。) 收尾 我希望本教程能帮助您在Ubuntu 16.04服务器上安装Mailtrain。您可以访问Mailtrain wiki以查找有关使用Mailtrain的更多信息。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?
-
如何在Ubuntu18.04上设置OpenStreetMap Tile服务器
OpenStreetMap,又名OSM,是一个用户贡献的世界地图,可以自由编辑。你可以把它看作是谷歌地图的开源和自托管替代品。本教程将向您展示如何在Ubuntu18.04上构建自己的OpenStreetMap tile服务器,这样您就不必使用专有的地图服务。 OpenStreetMap功能 OpenStreetMap的数据覆盖了全世界,因此可以方便地支持任何国家或每个国家的用户。 OpenStreetMap每天每小时每分钟都会更新,您可以实时获得这些更新。 OpenStreetMap数据是免费和开放的,不收取订阅费和页面浏览费。 OpenStreetMap数据丰富而详细,包含大量与地面人员相关的数据——收集数据的人员。 先决条件/硬件要求 所需的RAM和磁盘空间取决于要使用哪个国家的地图。例如 英国地图至少需要12G内存和60GB磁盘空间。 整个行星地图至少需要32G RAM和1TB SSD磁盘。用旋转硬盘来绘制整个地球地图是不可行的。 如果要在web浏览器中预渲染分幅以加快地图加载速度,则需要更多磁盘空间,这是强烈建议的。查看此页面以查看预渲染磁贴需要多少磁盘空间。例如,如果要为行星地图预渲染从缩放级别0到缩放级别15的平铺,则需要额外的460 GB磁盘空间。 另外需要注意的是,将大型地图数据(如整个地球)导入PostgreSQL数据库需要很长时间。考虑添加更多的RAM,特别是使用SSD,而不是旋转硬盘来加速导入过程。 如果你打算主持整个世界地图,我建议你从康塔博购买超大VPS,康塔博以 10核CPU 60 GB内存 1.6 TB英特尔Optane SSD 每月只需26.99欧元。 第一步:升级软件 在服务器上进行任何主要工作之前,更新服务器软件始终是一种好的做法。通过SSH登录服务器并运行以下命令。 sudo-apt更新;sudo-apt升级 第2步:安装PostgreSQL数据库服务器和PostGIS扩展 我们将使用PostgreSQL存储地图数据。PostGIS是PostgreSQL的地理空间扩展。运行以下命令来安装它们。 sudo apt安装postgresql postgresql contrib postgis postgresql-10-postgis-2.4 PostgreSQL数据库服务器将自动启动并侦听127.0.0.1:5432。安装过程中将在操作系统上创建postgres用户。它是PostgreSQL数据库服务器的超级用户。默认情况下,该用户没有密码,也不需要设置密码,因为您可以使用sudo切换到postgres用户并登录到PostgreSQL server。 sudo-u postgres-i 现在可以创建PostgreSQL数据库用户osm。 createuser osm 然后创建一个名为gis的数据库,同时让osm成为数据库的所有者-UTF8指定数据库中使用的字符编码方案为UTF8。 createdb-E UTF8-O osm gis 接下来,为gis数据库创建postgis和hstore扩展。 psql-c“创建扩展postgis-d gis psql-c“创建扩展存储-三维地理信息系统 将osm设置为表所有者。 psql-c“将表空间参考系统所有者更改为osm-三维地理信息系统 退出postgres用户。 出口 在操作系统上创建osm用户,以便平铺服务器可以作为osm用户运行。以下命令将创建一个没有密码的系统用户。 sudo adduser——系统osm 第3步:下载地图样式表和地图数据 切换到osm的主目录。 cd/home/osm/ 使用git将最新的CartoCSS地图样式表下载到osm用户的主目录。 sudo apt安装git git克隆https://github.com/gravitystorm/openstreetmap-carto.git 如果在运行上述命令时看到“权限被拒绝”错误,则可以使用以下命令授予权限。用真实用户名替换用户名。 sudo setfacl-R-mu:username:rwx/home/osm/ 接下来,运行以下命令以PBF(ProtoBufBinary)格式下载整个行星(50G)的地图数据。 wget-chttp://planet.openstreetmap.org/pbf/planet-latest.osm.pbf 请注意openstreetmap的下载速度。org当前限制为2048kb/s。您可以从另一个镜像下载植物地图,如 wget-chttps://download.bbbike.org/osm/planet/planet-latest.osm.pbf 如果你想要一张各个国家/州/省/市的地图,请访问http://download.geofabrik.de.还有,自行车。org以不同的格式提供了全球200多个城市和地区的摘录。例如,使用以下命令下载英国地图数据(1.1G)。 wget-chttp://download.geofabrik.de/europe/great-britain-latest.osm.pbf 第4步:优化PostgreSQL Server性能 导入过程可能需要一些时间。为了加快这个过程,我们可以调整一些PostgreSQL server设置以提高性能。编辑PostgreSQL主配置文件。 sudo nano/etc/postgresql/10/main/postgresql。形态 首先,我们应该更改共享缓冲区的值。默认设置为: 共享缓冲区=128MB 这个太小了。经验法则是将其设置为总RAM的25%(不包括交换空间)。例如,我的VPS有60G RAM,所以我将其设置为: 共享缓冲区=15GB 找到下面这行。 #工作_内存=4MB#维护_工作_内存=64MB 同样,该值太小。 工作记忆=1GB维护记忆=8GB工作记忆=8GB 然后找到下面一行。 #有效缓存大小=4GB 如果你像我一样有很多RAM,你可以为有效的缓存大小设置一个更高的值,比如20G。 有效缓存大小=20GB 保存并关闭文件。重新启动PostgreSQL以使更改生效。 sudo systemctl重启postgresql 默认情况下,PostgreSQL会尝试在RAM中使用巨大的页面。然而,Linux默认情况下不会分配巨大的页面。检查PostgreSQL的进程ID。 sudo head-1/var/lib/postgresql/10/main/postmaster。pid 样本输出: 7031 然后检查该进程ID的峰值。 grep^VmPeak/proc/7031/status 样本输出: 峰值:16282784 kB 这是PostgreSQL将使用的峰值内存大小。现在检查Linux中巨大页面的大小。 cat/proc/meminfo | grep-i巨大 样本输出: AnonHugePages:0 kB ShmemHugePages:0 kB HugePages_总计:0 HugePages_免费:0 HugePages_Rsvd:0 HugePages_SUPPR:0 HugePages大小:2048 kB 我们可以计算出我们需要多少巨大的页面。将VmPeak值除以巨大页面的大小:16282784KB/2048KB=7950。编辑/etc/sysctl。conf文件。 sudo nano/etc/sysctl。形态 在文件末尾添加以下行,分配7950个大页面。 虚拟机。nr_hugepages=7950 保存并关闭文件。然后应用更改。 sudo sysctl-p 如果你再次查看meminfo, cat/proc/meminfo | grep-i巨大 我们可以看到有7950个巨大的页面可用。 AnonHugePages:0 kB ShmemHugePages:0 kB HugePages_总计:7950 HugePages_免费:7950 HugePages_Rsvd:0 HugePages_supp:0 HugePages大小:2048 kB 重新启动PostgreSQL以使用大型页面。 sudo systemctl重启postgresql 建议配置SSH keepalive,以免丢失SSH连接。这很容易做到。只需在本地Linux机器上打开SSH客户端配置文件。 sudo nano/etc/ssh/ssh_config 并将以下文本粘贴到文件末尾。 ServerAliveInterval 60 然后保存文件并连接到你的Ubuntu服务器。您还可以通过VNC访问远程服务器,以防止脆弱的连接中断导入过程。 步骤5:将地图数据导入PostgreSQL 要导入地图数据,我们需要安装osm2pgsql,将OpenStreetMap数据转换为支持postGIS的PostgreSQL数据库。 sudo apt安装osm2pgsql 向postgres用户授予权限。 sudo setfacl-R-mu:postgres:rwx/home/osm/ 切换到postgres用户。 sudo-u postgres-i 运行以下命令将地图样式表和地图数据加载到gis数据库中。最新取代英国。奥斯曼。pbf与您自己的地图数据文件。 osm2pgsql--slim-dGIS--hstore--multi-geometry--number processs 10--tag transform script/home/osm/openstreetmap carto/openstreetmap carto。lua——style/home/osm/openstreetmap carto/openstreetmap carto。款式-C 32000/家居/osm/英国最新款。奥斯曼。pbf 哪里 --苗条模式:在苗条模式下运行,而不是在正常模式下运行。如果希望将来使用OSM更改文件(OSC)更新地图数据,则需要此选项。 -d gis:选择数据库。 --hstore:将不带列的标记添加到PostgreSQL表的另一个hstore(key/value)列中 --多重几何图形:在postgresql表中生成多重几何图形特征。 --样式:指定样式文件的位置 --进程数:服务器上的CPU核心数。我有10个。 -C标志以兆字节为单位指定缓存大小。它应该是你机器上可用内存的70%左右。缓存大小越大,导入速度越快。例如,我的服务器有60GB的RAM,所以我可以指定-C 32000。请注意,PostgreSQL将需要用于共享缓冲区的RAM。使用此公式计算缓存大小应该有多大:(总RAM-PostgreSQL共享_缓冲区)*70% 最后,需要指定地图数据文件的位置。 命令输出: 如果要导入完整的行星地图数据,请使用--drop选项和--flat nodes选项来提高导入速度。请注意--flat nodes选项不适用于小贴图。 osm2pgsql——slim-d gis——drop——flat节点。cache--hstore--multi-geometry--number processs 10--tag transform script/home/osm/openstreetmap carto/openstreetmap carto。lua——style/home/osm/openstreetmap carto/openstreetmap carto。款式-C 32000/家居/osm/planet最新款式。奥斯曼。pbf 在导入过程中,RAM的使用将逐渐增加。导入完成后,将gis数据库的所有权限授予osm用户。 psql-c“将模式公共中所有表的所有权限授予osm-三维地理信息系统 退出postgres用户。 出口 第6步:安装mod_tile和Renderd mod_tile是一个Apache模块,需要为tiles提供服务,renderd是渲染OpenStreetMap tiles的渲染守护进程。默认的Ubuntu存储库不包括mod_tile和renderd,但我们可以从OSM PPA安装它们。 sudo-apt-install-software-properties通用sudo-add-apt-repository-ppa:osmadmins/ppa-sudo-apt-install-libapache2 mod tile-renderd 在安装过程中,它将安装Apache web服务器,并询问您是否希望在Apache配置中启用mod_tile。选择Yes并按Enter键。这将为mod_tile(/etc/apache2/sites available/tileserver_site.conf)创建一个Apache配置文件。 渲染守护进程将自动启动,如下所示: systemctl状态呈现 第7步:生成Mapnik样式表 安装所需的软件包。 sudo apt安装curl解压gdal bin mapnik utils libmapnik dev python3 pip 我们还需要使用以下命令从上游存储库安装nodejs和npm。 curl-sLhttps://deb.nodesource.com/setup_12.x| sudo-E bash-sudo apt get install-y nodejs 然后用npm安装carto软件包。 sudo npm安装-g carto 安装psycopg2 Python模块。 sudo-H pip3安装psycopg2==2.8.5 切换到postgres用户。 sudo-u postgres-i 将Cd放入carto style目录。 cd/home/osm/openstreetmap carto/ 获取形状文件。 脚本/获取外部数据。py 如果在运行上述命令时遇到以下错误消息,则说明您存在DNS问题。只需等待几分钟,然后再次运行Python脚本。 未能建立新连接:[Errno-3]名称解析暂时失败 现在使用carto map样式表编译器构建Mapnik XML样式表。 carto项目。mml>;风格xml 将gis数据库的所有权限授予osm用户。 psql-c“将模式公共中所有表的所有权限授予osm-三维地理信息系统 退出postgres用户。 出口 第8步:安装字体 您需要安装ttf dejavu软件包。 sudo apt安装ttf dejavu 要显示非拉丁字符,请安装以下软件包。 sudo apt安装字体noto cjk字体noto提示字体noto未经修改的ttf unifont 步骤9:配置renderd 编辑渲染配置文件。 sudo nano/etc/renderd。形态 在[renderd]部分,根据服务器上的CPU内核数更改线程数。 线程数=10 在[default]部分,将XML和HOST的值更改为以下值。请注意,以分号(;)开头的行这些都是评论。 XML=/home/osm/openstreetmap carto/style。xml HOST=map。你的领域。通用域名格式 在[mapnik]部分,将plugins_dir的值更改为以下值。 plugins_dir=/usr/lib/mapnik/3.0/input/ 您可以使用以下命令打印默认的输入插件目录。 mapnik config——输入插件 如果要显示非拉丁字符,最好将字体设置更改为以下内容。 font_dir=/usr/share/fonts/truetype font_dir_recurse=true 保存并关闭文件。然后编辑init脚本文件 sudo nano/etc/init。d/renderd 找到下面这行。 RUNASUSER=www数据 将用户更改为osm。这是从PostgreSQL数据库加载地图数据所必需的。 RUNASUSER=osm 保存文件。将osm设置为/var/lib/mod_tile/目录的所有者,该目录将保存渲染的tile文件。 sudo chown osm/var/lib/mod_tile/-R 然后重新启动renderd服务。 sudo systemctl守护进程重新加载sudo systemctl restart renderd 你需要查看renderd的日志。 sudo journalctl-欧盟趋势 确保renderd不会在日志中产生任何错误,否则地图将不会显示。 第10步:配置Apache 编辑OSM虚拟主机文件。 sudo nano/etc/apache2/sites available/tileserver_site。形态 将服务器名更改为自己的域名,如map。你的地盘。通用域名格式。您还需要为此子域创建DNS记录。 服务器名映射。你的地盘。通用域名格式 保存并关闭文件。重启Apache。 sudo systemctl重启apache2 然后在web浏览器地址栏中键入 地图你的领域。com/osm/0/0/0。巴布亚新几内亚 你应该看到世界地图的瓷砖。恭喜!您刚刚成功构建了自己的OSM磁贴服务器。 如果已启用UFW防火墙,请确保使用以下命令打开端口80和443。 sudo ufw允许80443/tcp 第11步:显示平铺的网络地图 平铺网络地图在OpenStreetMap术语中也称为slippy地图。有两个免费的开源JavaScript地图库可用于tile服务器:OpenLayer和传单。传单的优点是使用简单,而且地图便于移动。 露天层 要使用OpenLayer显示你的slippy地图,请从OpenLayer下载JavaScript和CSS。组织并将其解压缩到webroot文件夹。 cd/var/www/sudo wgethttps://github.com/openlayers/openlayers/releases/download/v5.3.0/v5.3.0.zipsudo解压v5。3.0.拉链 接下来,创建索引。html文件。 sudo nano/var/www/index。html 在文件中粘贴以下HTML代码。替换红色文本,并根据需要调整经度、纬度和缩放级别。 <;!DOCTYPE html>&书信电报;html>&书信电报;头>&书信电报;meta charset=“UTF-8”大于&书信电报;标题>;无障碍地图</标题>&书信电报;link rel=“stylesheet”href=”http://map.yourdomain.com/v5.3.0/css/ol.css“type=“text/css”>;<;script src=”http://map.yourdomain.com/v5.3.0/build/ol.js“>;<;/script>;<;style>;a.skipling{位置:绝对;剪辑:rect(1px,1px,1px,1px);填充:0;边框:0;高度:1px;宽度:1px;溢出:隐藏;}”a、 skiplink:focus{clip:auto;height:auto;width:auto;background color:#fff;padding:0.3em;}#地图:焦点{轮廓:#4A74A8固体0.15em;}</风格></头>&书信电报;车身>&书信电报;a class=“skipling”href=“#map”>;转到地图</a>&书信电报;div id=“map”class=“map”tabindex=“0”></部门>&书信电报;按钮id=“缩小”>;缩小</按钮>&书信电报;按钮id=“放大”>;放大</按钮>&书信电报;脚本>;var map=新ol。Map({layers:[new ol.layer.Tile({source:new ol.source.OSM({url:'http://map.yourdomain.com/osm/{z} /{x}/{y}。png'})}),目标:'map',控件:ol。控制默认值({attributeoptions:/**@type{olx.control.attributeoptions}*/({collapsable:false})),视图:new ol。视图({center:[244780.245088823557386452.183179816],zoom:5});文件getElementById(“缩小”)。onclick=function(){var view=map.getView();var zoom=view.getZoom();view.setZoom(zoom-1);};文件getElementById(“放大”)。onclick=function(){var view=map.getView();var zoom=view.getZoom();view.setZoom(zoom+1);}</脚本></车身></html>; 保存并关闭文件。现在你可以通过在浏览器地址栏中输入你的子域来查看你的拖拉地图。 地图你的地盘。通用域名格式 或 地图你的地盘。com/index。html 传单 要使用Leftlet显示slippy地图,请从leftletjs下载JavaScript和CSS。com并将其解压缩到webroot文件夹。 cd/var/www/sudo wgethttp://cdn.leafletjs.com/leaflet/v1.6.0/leaflet.zipsudo解压传单。拉链 接下来,创建索引。html文件。 sudo nano/var/www/index。html 在文件中粘贴以下HTML代码。替换红色文本,并根据需要调整经度、纬度和缩放级别。 <;html>&书信电报;头>&书信电报;meta charset=“UTF-8”大于&书信电报;标题>;我的第一个osm</标题>&书信电报;link rel=“stylesheet”type=“text/css”href=“传单.css”/>&书信电报;script type=“text/javascript”src=“ployate.js”></脚本>&书信电报;风格>#地图{宽度:100%;高度:100%}</风格></头>&书信电报;车身>&书信电报;div id=“map”></部门>&书信电报;脚本>;var map=L.map('map')。setView([53.555,9.899],5);蒂莱莱耶http://map.yourdomain.com/osm/{z} /{x}/{y}。png',{maxZoom:18})。addTo(地图)</脚本></车身></html>; 保存并关闭文件。现在,您可以通过在浏览器中键入服务器IP地址来查看拖沓的地图。 地图你的地盘。通用域名格式 或 地图你的地盘。com/index。html 步骤12:预渲染瓷砖 动态渲染平铺将增加在web浏览器中加载地图的时间。要预渲染平铺而不是动态渲染,请使用以下render_list命令。使用-z和-z标志指定缩放级别,并根据服务器上的CPU内核数替换线程数。Render_list通过向渲染守护进程发送请求来渲染贴图分幅列表。预渲染的磁贴将缓存在/var/lib/mod_tile目录中。 render_list-m default-a-z 0-z 19--num threads=10 如果以后更新了贴图数据,可以使用--force选项再次预渲染所有分片。 render_list-m default-a-z 0-z 19--num threads=10--force 要在背景中渲染贴图分幅,请添加&;结尾的符号。 render_list-m default-a-z 0-z 19--num threads=10&; 现在你可以关闭终端窗口了。要检查呈现进度,请打开另一个SSH会话,然后运行以下命令。 sudo journalctl-欧盟趋势 上面的命令将显示renderd服务的最新日志。以下几行显示我的OSM服务器现在正在以缩放级别12渲染地图分幅。 renderd[20838]:调试:开始平铺默认值12 1008-1015 4056-4063,新metatile renderd[20838]:渲染投影坐标12 1008 4056->-10175297.205328 |-19724422.274944-10097025.688364 |-19646150.757980到一个8 x 8平铺渲染[20838]:调试:在0.799秒内完成平铺默认12 1008-1015 3984-3991渲染[20838]:调试:将协议版本2的渲染命令(3默认12/1008/3984)发送到fd 18渲染[20838]:调试:使用协议版本2 renderd[20838]获得传入请求:调试:获得命令RenderBulk fd(18)xml(默认),z(12),x(1008),y(4064),mime(图像/png),选项()渲染[20838]:调试:开始平铺默认值12 1008-1015 4064-4071,新metatile渲染[20838]:渲染投影坐标12 1008 4064->-10175297.205328 |-19802693.791908-10097025.688364 |-19724422.274944至8 x 8瓷砖 步骤13:启用HTTPS 为了加密HTTP流量,我们可以从Let's encrypt获得并安装免费的TLS证书。首先,在Ubuntu 18.04上安装Let's Encrypt客户端(certbot)。 sudo add apt repository ppa:certbot/certbot sudo apt install certbot 因为我们使用的是ApacheWeb服务器,所以我们还需要安装Apache插件。 sudo apt安装python3 certbot apache 然后运行以下命令获取并安装TLS证书。 sudo certbot--apache--agree tos--redirect--hsts--style ocsp--must style--email[email ;protected]-d map。你的地盘。通用域名格式 安装证书后,刷新网页,您将在地址栏中看到一个锁。 如果你在Firefox地址栏中看到一个黄色的三角形,这意味着tile URL仍在使用HTTP。你需要编辑索引。html文件,并使用以下命令将所有HTTP协议替换为HTTPS。 sudo sed-i's/http/https/g'/var/www/index。html 步骤14:启用HTTP2 为了进一步提高映射加载性能,可以启用HTTP2协议。首先,需要启用HTTP2模块。 sudo a2enmod http2 然后打开SSL虚拟主机文件。 sudo nano/etc/apache2/sites enabled/tileserver_site-le-ssl。形态 在打开后放置以下指令<;VirtualHost*:443>;标签 协议h2 http/1.1 保存并关闭文件。然后重启Apache,使更改生效。 sudo systemctl重启apache2 限制对OSM磁贴服务器的访问 默认情况下,任何人都可以使用OpenLayer或传单创建一个带有tile服务器URL的滑动地图。要限制对tile服务器的访问,请编辑Apache虚拟主机文件。 sudo nano/etc/apache2/sites enabled/tileserver_site-le-ssl。形态 在<;VirtualHost>;标签。 <;位置/osm>;SetEnvIf Referer example/。com trusted_referer Order deny,allow deny from all allow from env=trusted_referer</地点>; 上面的代码检查HTTP referer头是否包含您自己的域。否则,将拒绝访问/osm目录。反斜杠用于转义点字符。要将多个主机名添加为受信任的引用,请使用以下语法。 SetEnvIf Referer(example/.com | www/.example/.com | map/.example/.com)可信的_Referer 保存并关闭文件。然后测试语法。 sudo apache2ctl-t 如果语法正确,请重新加载Apache以使更改生效。 sudo systemctl重新加载apache2 自动更新TLS证书 您可以创建Cron作业来自动续订TLS证书。只需打开root用户的crontab文件。 sudo crontab-e 在文件底部添加以下行。 @每日certbot更新——安静与&;systemctl重新加载apache2 不同主机上的PostgreSQL数据库和Web服务器 如果PostgreSQL和Apache web服务器位于不同的主机上,则需要编辑该项目。Apache主机上的mml文件。 nano/home/osm/openstreetmap-carto-4.20.0/project。嗯 找到以下几行: osm2pgsql:&;osm2pgsql类型:“postgis”dbname:“gis”键字段:“几何体”字段:“方式”范围:“-20037508,-200375082003750820037508” 指定PostgreSQL数据库服务器的IP地址。 osm2pgsql:&;osm2pgsql类型:“postgis”主机:“10.0.0.2”数据库名:“gis”键字段:“几何体”字段:“方式”范围:“-20037508,-200375082003750820037508” 保存并关闭文件。然后使用carto map样式表编译器构建Mapnik XML样式表。 carto项目。mml>;风格xml 在PostgreSQL数据库服务器上,编辑主配置文件。 sudo nano/etc/postgresql/10/main/postgresql。形态 添加以下行,将PostgreSQL设置为在所有接口上侦听。 听_addresses='*' 保存并关闭文件。然后编辑PostgreSQL客户端身份验证配置文件。 sudo nano/etc/postgresql/10/main/pg_hba。形态 在文件末尾添加以下行,以允许osm用户从Apache主机登录。将10.0.0.1替换为Apache主机的IP地址。 主机gis osm 10.0.0.1/32信任 保存并关闭文件。然后重新启动PostgreSQL。 sudo systemctl重启postgresql 在Apache主机上重新启动渲染守护程序。 sudo systemctl重新启动renderd 你需要查看renderd的日志。确保renderd不会在日志中产生任何错误,否则地图将不会显示。 sudo journalctl-欧盟趋势 还应限制对PostgreSQL数据库服务器端口5432的访问。例如,您可以使用以下UFW命令只允许Apache主机的IP地址。 sudo ufw允许从10.0.0.1进入任何端口5432 结论 我希望本教程能帮助您在Ubuntu18.04上安装OpenStreetMap tile服务器。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?
-
如何在Ubuntu 20.04上安装SocialBoard–社交媒体潜在客户开发工具包
本教程将向您展示如何使用Apache或Nginx web服务器在Ubuntu20.04上安装Socioboard。Socioboard是一款面向企业的开源、自托管社交媒体潜在客户开发工具包。Socioboard提供托管服务,但如果您想在自己的服务器上自行托管软件,可以按照以下说明操作。 社交板功能 社交网络是面向用户的,而不是面向企业的。SocialBoard从商业角度看待社交,填补社交网络无法完美填补的空白。企业应该拥有自己的社交数据,并负责他们想用它做什么,生成报告和分析数据,以做出明智和改进的商业决策。 委员会提供: 高度可定制和可扩展的开源工具 即时订阅源和交互式社交发现工具 社交CRM工具,包括共享客户记录 高效的团队协作工具 高级日程安排;出版工具 各种参数的复杂分析 任务和帮助台集成等客户支持功能 先决条件 首先,你需要一台至少有2GB内存的Linux服务器。你可以点击这个特殊链接在DigitalOcean上获得100美元的免费积分。(仅限新用户使用)。如果您已经是DigitalOcean用户,那么您可以单击此特殊链接在Vultr上获得50美元的免费积分(仅限新用户)。一旦你在DigitalOcean或Vultr上拥有了一个帐户,请在你的服务器上安装Ubuntu20.04,并按照以下说明操作。 Socioboard需要PHP和MySQL/MariaDB。要学习本教程,您应该已经设置了灯堆栈或LEMP堆栈。如果您还没有这样做,请使用以下指南之一。 如何在Ubuntu 20.04上安装LAMP(Apache、MariaDB、PHP)堆栈 如何在Ubuntu 20.04上安装LEMP(Nginx、MariaDB、PHP)堆栈 你还需要一个域名。我在namescape注册了我的域名,因为价格低廉,而且他们终身免费保护whois的隐私。 现在,让我们安装Socioboard。 第一步:在Ubuntu 20.04服务器上下载Socioboard 通过SSH登录Ubuntu 20.04服务器。然后运行以下命令将最新版本的Socioboard下载到服务器上。 sudo apt安装git git克隆https://github.com/socioboard/Socioboard-4.0.git 下载后,将文件移动到/var/www/目录。 sudo mkdir-p/var/www/sudo mv Socioboard-4.0/var/www/Socioboard 然后我们需要向www数据用户授予权限,以便web服务器可以写入该目录。 sudo setfacl-R-mu:www-data:rwx/var/www/socioboard/ 第2步:安装节点。js Socioboard后端构建在节点上。js是一个JavaScript运行时环境,可以将人类可读的JavaScript代码转换为机器代码,所以我们需要安装Node。在Ubuntu 20.04上运行js以运行Socioboard。本教程将安装Node的LTS版本。来自NodeSource存储库的js(V12.x)。 curl-sLhttps://deb.nodesource.com/setup_12.x| sudo-E bash-sudo apt install-y nodejs nodejs包包含npm(Node.js package manager)二进制文件,因此无需单独安装。检查你的节点。js和npm版本,运行 node-v npm-v 输出: 步骤3:安装节点包 首先,在全局模式下安装nodemon、sequalize和mysql2包。 sudo npm安装nodemon sequelize cli sequelize mysql2-g 在/var/www/socioboard/socioboard api/目录中,有5个子目录。 喂养 图书馆 通知 出版 使用者 我们需要转到每个子目录并安装依赖项包。例如,转到feeds子目录。 cd/var/www/socioboard/socioboard api/feed 并安装依赖软件包,这些软件包将放在node_modules目录中。 npm安装 如果发现漏洞,请运行以下命令修复漏洞。 npm审计修复 现在在其他4个子目录中执行同样的操作。 第4步:在MariaDB中创建数据库和用户 使用以下命令登录MariaDB数据库服务器。 sudo mysql 然后为Socioboard创建一个数据库。本教程将数据库命名为socioboard。你可以用任何你喜欢的名字。 创建数据库; 创建数据库用户。同样,您可以使用此用户的首选名称。将_密码替换为首选密码。 创建用户socioboard@localhost由“你的_密码”标识; 授予此用户在socioboard数据库上的所有权限。 授予董事会的所有特权。*到socioboard@localhost; 刷新权限并退出。 同花顺特权;出口 第5步:建立MariaDB数据库 编辑一个文件。 sudo nano/var/www/socioboard/socioboard api/library/sequelize cli/config/config。json 输入数据库名称、用户名和密码。 保存并关闭文件。然后更改目录。 cd/var/www/socioboard/socioboard api/library/sequelize cli/ 初始化socioboard数据库。 NODE_ENV=开发续集数据库:迁移 在/var/www/socioboard/socioboard api/library/sequelize cli/seeders/目录中,有一个文件的名称以application_info结尾。js。运行以下命令。 NODE_ENV=development sequelize db:seed--seed 20190213051930-initialize_application_info。js 步骤6:安装MongoDB MongoDB是一个面向文档的NoSQL数据库程序。运行以下命令导入MongoDB公共GPG密钥 wget-qO-https://www.mongodb.org/static/pgp/server-4.4.asc| sudo apt按键添加- 为MongoDB创建源列表文件。 echo“deb[arch=amd64,arm64] multiverse“| sudo-tee/etc/apt/sources.list.d/mongodb-org-4.4.list 更新包索引并安装MongoDB。 sudo apt更新sudo apt安装-y mongodb org 启动MongoDB。 sudo systemctl启动mongod 启动时启用自动启动。 sudo systemctl启用mongod 检查其状态: systemctl状态mongod 样本输出: ● 蒙哥德。服务-MongoDB数据库服务器已加载:已加载(/lib/systemd/system/mongod.service;已启用;供应商预置:已启用)活动:活动(运行)自2020-08-03周一17:39:42 HKT;52年前的文档:https://docs.mongodb.org/manual主PID:2710248(mongod)内存:61.8M CGroup:/system。切片/蒙哥德。服务└─2710248/usr/bin/mongod--config/etc/mongod。形态 如你所见,它处于活动状态(正在运行)。 步骤7:在MongoDB中创建数据库和用户 登录MongoDB shell。 蒙戈 为SocioBoard创建一个数据库。 使用社交板 您需要在此数据库中插入至少一个文档。运行以下命令插入示例文档。 db。新_系列。插入({some_key:“some_value”}) 然后运行以下命令创建一个用户。 db。createUser({user:“socioboard”,pwd:“您的_密码”,roles:[{role:“readWrite”,db:“socioboard”}]}) 离开MongoDB外壳。 出口 步骤8:设置MongoDB连接 编辑一个文件。 sudo nano/var/www/socioboard/socioboard api/user/config/development。json 输入数据库名称、用户名和密码。 向下滚动至文件末尾,添加以下三行。 “基本路径”:“../../media”,“付款路径”:“../../media/payments”,“模板”:“public/template/paymentTemplate.html” 保存并关闭文件。然后还要编辑以下3个文件,并输入MongoDB数据库名称、用户名和密码。 /var/www/socioboard/socioboard api/feeds/config/development。json /var/www/socioboard/socioboard api/notification/config/development。json /var/www/socioboard/socioboard api/publish/config/development。json 第9步:运行Socioboard微服务 sudo nano/etc/systemd/system/socioboard用户。服务 添加以下行。用真实用户名替换用户名。 [Unit]Description=社交板用户微服务After=多用户。target[Service]Type=simple User=username WorkingDirectory=/var/www/socioboard/socioboard api/User/Environment=NODE_ENV=development ExecStart=/usr/bin/nodemon app。js Restart=on failure RestartSec=5[Install]WantedBy=multi-user。目标 保存并关闭文件。 sudo nano/etc/systemd/system/socioboard发布。服务 添加以下行。用真实用户名替换用户名。 [Unit]Description=SocioBoard Publish Microservice After=多用户。target[Service]Type=simple User=username WorkingDirectory=/var/www/socioboard/socioboard api/publish/Environment=NODE_ENV=development ExecStart=/usr/bin/nodemon app。js Restart=on failure RestartSec=5[Install]WantedBy=multi-user。目标 保存并关闭文件。 sudo nano/etc/systemd/system/socioboard提要。服务 添加以下行。用真实用户名替换用户名。 [Unit]Description=SocioBoard Feeds Microservice After=多用户。target[Service]Type=simple User=username WorkingDirectory=/var/www/socioboard/socioboard api/feed/Environment=NODE_ENV=development ExecStart=/usr/bin/nodemon app。js Restart=on failure RestartSec=5[Install]WantedBy=multi-user。目标 保存并关闭文件。 sudo nano/etc/systemd/system/socioboard通知。服务 添加以下行。用真实用户名替换用户名。 [Unit]Description=SocioBoard Notification Microservice After=多用户。target[Service]Type=simple User=username WorkingDirectory=/var/www/socioboard/socioboard api/notification/Environment=NODE_ENV=development ExecStart=/usr/bin/nodemon app。js Restart=on failure RestartSec=5[Install]WantedBy=multi-user。目标 保存并关闭文件。然后启动4个服务。 sudo systemctl启动社交板用户社交板发布社交板feeds社交板通知 现在,您应该检查每个服务的状态。 systemctl status Socialboard用户systemctl status Socialboard发布systemctl status Socialboard馈送systemctl status Socialboard通知 对于每个服务,如果您看到这样的消息 监听服务http://localhost:3000 然后服务成功启动。如果您没有看到此消息,则会出现错误,您可以查看public/logs/文件夹中的日志,以了解问题所在。 如果所有服务都已成功启动,则在启动时启用自动启动。 sudo systemctl enable socioboard用户socioboard发布socioboard提要socioboard通知 第10步:设置Socioboard web php 更改目录。 cd/var/www/socioboard/socioboard web php/ 安装Laravel。 sudo apt install composer composer global需要laravel/installer 重命名环境文件。env to。环境。 mv环境文件。环境。环境 编辑这个文件。 纳米技术。环境 输入应用程序URL和API URL。社会委员会。实例com是您将在web浏览器地址栏中输入的URL,用于访问SocialBoard。 应用程序URL=https://socioboard.exmaple.com/API_URL=http://localhost:3000/API_URL_发布=http://localhost:3001/API_URL_提要=http://localhost:3002/API_URL_通知=http://localhost:3003/ 保存并关闭文件。然后安装PHP依赖项。 作曲家更新 接下来,生成一个Laravel应用程序密钥,该密钥将保存在。环境文件。 php artisan密钥:生成 步骤11:设置Web服务器 我们可以使用Apache或Nginx web服务器。 阿帕奇 如果您更喜欢Apache,请为Socioboard创建一个虚拟主机文件。 sudo nano/etc/apache2/网站可用/社交板。形态 将以下文本放入文件中。更换董事会。实例与你自己的Socioboard子域进行com。别忘了在DNS管理器中设置域名记录。 <;虚拟主机*:80>;服务器名和主板。实例com DocumentRoot/var/www/socioboard/socioboard-web-php/public/<;目录/var/www/socioboard/socioboard-web-php/public/>;目录索引。php选项+FollowSymLinks AllowOverride All需要全部授予</目录>;ErrorLog${APACHE_LOG_DIR}/socioboard。错误log CustomLog${APACHE_log_DIR}/socioboard。通道日志合并</VirtualHost>; 保存并关闭文件。然后启用这个虚拟主机。 SudoA2ensite社交董事会。形态 我们需要启用重写模块。 sudo a2enmod重写 重新启动Apache以使更改生效。 sudo systemctl重启apache2 Nginx 如果您更喜欢Nginx,请为Socioboard创建一个虚拟主机文件。 sudo nano/etc/nginx/conf.d/socioboard。形态 将以下文本放入文件中。更换董事会。实例与你自己的Socioboard子域进行com。别忘了在DNS管理器中设置域名记录。 服务器{listen 80;listen[:]:80;server_name socioboard.example.com;root/var/www/socioboard/socioboard web php/public/;index index.php index.html index.htm index.nginx-debian.html;error_log/var/log/nginx/socioboard.error;location/{try_files$uri$uri//index.php;}错误_第404/404页。html;错误_第500页502 503 504/50x。html;客户最大尺寸2米;位置=/50x。html{root/usr/share/nginx/html;}地点~/。php${fastcgi_pass unix:/run/php/php7.4-fpm.sock;fastcgi_-param SCRIPT_FILENAME$document_root$fastcgi_-SCRIPT_-name;include fastcgi_-params;include snippets/fastcgi-php.conf;}#启用gzip压缩gzip on;gzip_随时间而变化;gzip_min_长度1000;gzip_comp_5级;gzip_类型application/json text/css application/x-javascript application/javascript image/svg+xml;gzip#u代理任何;#较长的浏览器缓存寿命可以加快对页面位置的重复访问~*/。(jpg | jpeg | gif | png | webp | svg | woff | woff2 | ttf | css | js | ico | xml)${accesslog off log_not found off;expires 360d;}禁用对隐藏文件位置~//的访问。ht{access_log off;log_not_found off;deny all;} 保存并关闭文件。然后测试Nginx配置。 sudo nginx-t 如果测试成功,请重新加载Nginx以使更改生效。 sudo systemctl重新加载nginx 步骤12:启用HTTPS 为了加密HTTP流量,我们可以通过安装Let's encrypt颁发的免费TLS证书来启用HTTPS。运行以下命令在Ubuntu20.04服务器上安装Let's Encrypt client(certbot)。 sudo apt安装certbot 如果您使用Nginx,那么您还需要安装Certbot Nginx插件。 sudo apt安装python3 certbot nginx 接下来,运行以下命令获取并安装TLS证书。 sudo certbot--nginx--agree tos--redirect--hsts--staple ocsp--email[email ;protected]-d社交板。你的地盘。通用域名格式 如果使用Apache,请安装Certbot Apache插件。 sudo apt安装python3 certbot apache 并运行此命令以获取并安装TLS证书。 sudo certbot--apache--agree tos--redirect--hsts--StapleOCSP--email[email ;protected]-d社交板。你的地盘。通用域名格式 哪里 --nginx:使用nginx插件。 --apache:使用apache插件。 --同意:同意服务条款。 --重定向:通过301重定向强制HTTPS。 --hsts:为每个HTTP响应添加严格的传输安全头。强制浏览器始终对域使用TLS。防止SSL/TLS剥离。 --装订ocsp:启用ocsp装订。有效的OCSP响应被绑定到服务器在TLS期间提供的证书上。 现在应获得证书并自动安装。 步骤13:使用社交板 现在,您可以访问SocialBoard的web界面:https://socioboard.example.com.您需要创建一个帐户才能使用它。如果无法创建帐户,请检查/var/www/socioboard/socioboard web php/storage/logs/directory中的错误日志。 Socioboard将尝试向您发送验证电子邮件,但我发现它无法发送电子邮件。要激活您的帐户,您可以从MariaDB数据库更改激活状态。登录MariaDB shell。 sudo mysql 使用socioboard数据库。 使用社交板; 然后激活你的账户。 更新用户激活设置激活状态=1; 默认情况下,您的帐户属于基本计划,您可以更改为白金计划。 更新用户激活设置用户计划=7; 把贝壳留下。 出口 然后登录你的社交董事会账户。 结论 我希望本教程能帮助您在Ubuntu20.04服务器上安装Socioboard。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?
-
如何在Ubuntu服务器18.04/20.04上安装Ghost博客平台
本教程将向您展示如何在Ubuntu服务器上安装Ghost博客平台。Ghost是一个开源的博客软件,编码在Node中。js,允许你创建现代、美丽的博客。与WordPress相比,Ghost是轻量级的,速度更快,因为它是专门为写博客而构建的,不像WordPress那样是一个全面的内容管理系统。 鬼魂特征 在撰写本文时,Ghost的最新版本是v3。2.0,2019年12月23日发布。Ghost的特点如下: 一个基于降价的编辑器,可以让你快速写文章。 简单的内容管理。 与团队协作编辑。 计划出版 内置分析 正确的SEO直接内置,带有语义标记、永久链接、XML网站地图、规范标记和自动元数据,并带有手动覆盖。 集成AMP(加速移动页面)支持 完整的RSS订阅源、电子邮件订阅捕获表单和松弛的webhook集成 Ghost marketplace提供了数百个美丽的免费和高级主题 一个漂亮的默认主题卡塞尔与黑暗模式的支持。 可用于Linux、Mac和Windows的跨平台桌面应用程序。 官方的Ghost Migrator WordPress插件允许您轻松地从WordPress迁移到Ghost。 幽灵基金会提供托管主机,但在这里我们将看到如何在Ubuntu服务器上创建一个自我托管的鬼博客。 在Ubuntu服务器上安装Ghost的先决条件 要运行Ghost博客,你需要一个至少有1GB内存的服务器。你可以点击这个特殊链接在DigitalOcean上获得50美元的免费积分。(仅限新用户使用)。如果您已经是DigitalOcean用户,那么您可以单击此特殊链接在Vultr上获得50美元的免费积分(仅限新用户)。一旦你在DigitalOcean或Vultr拥有了一个帐户,请在你的服务器上安装Ubuntu,并按照下面的说明操作。为了获得最佳兼容性,请使用Ubuntu的LTS版本,如Ubuntu18.04或16.04。 你还需要有一个域名。我从namescape注册了我的域名,因为价格低廉,而且他们终身免费保护whois的隐私。 注意:我在Ubuntu上用一个sudo用户安装了Ghost。为了获得最佳效果,您还应该与sudo用户而不是root用户一起学习本教程。要添加sudo用户,只需运行 sudo adduser username sudo adduser username sudo 然后切换到新用户。 su-用户名 第一步:更新Ubuntu 如果您的服务器已经有一段时间没有更新,那么运行以下命令来更新现有的软件包。 sudo-apt更新;sudo-apt升级 第2步:安装节点。Ubuntu上的js Ghost要求您安装节点的LTS版本。js,不支持非LTS版本。Node的最新版本。js是v12。x、 但目前Ghost与Node更兼容。js v10。x、 使用下面的命令添加NodeSource存储库。 curl-sLhttps://deb.nodesource.com/setup_10.x| sudo-E bash- 然后安装Node。js。 sudo apt安装nodejs 检查节点版本。 节点-v 样本输出: v10。18.1 检查npm版本: npm-v 样本输出: 6.13.4 步骤3:安装MariaDB数据库服务器 支持MySQL和MariaDB。MariaDB是MySQL的替代品。它是由MySQL团队的前成员开发的,他们担心Oracle可能会将MySQL变成一个封闭源代码的产品。让我们安装MariaDB数据库服务器。 输入以下命令将其安装在Ubuntu 18.04/20.04上。 sudo apt安装mariadb服务器mariadb客户端 安装后,MariaDB服务器应自动启动。使用systemctl检查其状态。 系统控制状态 样本输出: ● 马里亚布。服务-MariaDB 10.1.34数据库服务器已加载:已加载(/lib/systemd/system/MariaDB.service;已启用;供应商预设:已启用)活动:自2018年9月8日11:13:27 UTC周六起活动(运行);21世纪前的文档:男:mysqld(8)https://mariadb.com/kb/en/library/systemd/主PID:3473(mysqld)状态:“立即处理SQL请求…”任务:27(限制:505)CGroup:/system。切片/切片。服务└─3473/usr/sbin/mysqld 如果未运行,请使用以下命令启动: sudo systemctl启动mariadb 要使MariaDB在系统启动时自动启动,请运行 sudo systemctl启用mariadb 现在运行安装后安全脚本。 sudo mysql_安全安装 当它要求您输入根密码时,请按enter键,因为根密码尚未设置。然后输入y设置MariaDB服务器的根密码。 接下来,您可以按Enter键回答所有剩余的问题,这将删除匿名用户、禁用远程根登录并删除测试数据库。这一步是MariaDB数据库安全的基本要求。(请注意,字母Y大写,这意味着它是默认答案。) 检查MariaDB服务器版本信息。 mariadb——版本 输出: mariadb版本15.1发行版10.1.34-mariadb,适用于使用readline 5.2的debian linux gnu(x86_64) 第4步:为Ghost创建数据库和用户 现在我们需要登录到MariaDB控制台,为Ghost创建一个数据库和用户。默认情况下,Ubuntu上的MaraiDB包使用unix_socket对用户登录进行身份验证,这基本上意味着您可以使用操作系统的用户名和密码登录到MariaDB控制台。因此,您可以运行以下命令登录,而无需提供MariaDB root密码。 sudo mariadb-u根 使用以下命令为Ghost创建数据库。我给它取名为鬼魂,但你可以用任何你喜欢的名字。(不要漏掉分号。) 创建数据库幽灵; 然后输入下面的命令,为Ghost创建数据库用户,并将Ghost数据库的所有权限授予该用户。 授予ghost的所有特权。*到ghost@localhost由“ghost_密码”标识; 刷新特权表以使更改生效,然后退出MariaDB控制台。 同花顺特权;出口 步骤5:安装Nginx Web服务器 Ghost将使用Nginx web服务器,所以运行以下命令从默认的Ubuntu存储库安装它。 sudo apt安装nginx 如果使用UFW防火墙,则还需要打开端口80和443。 sudo ufw allow 80/tcp sudo ufw allow 443/tcp 第6步:为你的博客域名创建记录 在安装Ghost之前,建议您为您的博客域名创建DNS A记录。A记录将你的域名指向你的Ubuntu服务器的IP地址。 第7步:安装Ghost 安装Ghost CLI。 sudo npm安装[电子邮件和#160;受保护]-g 然后为ghost创建一个目录(/var/www/ghost/)。 sudo mkdir-p/var/www/ghost/ 向您的用户帐户授予权限。用真实用户名替换用户名。 sudo apt install acl sudo setfacl-R-mu:username:rwx/var/www/ghost/sudo chmod 775/var/www/ghost 现在将工作目录更改为/var/www/ghost/并安装ghost。 cd/var/www/ghost/ghost安装 安装可能需要一段时间。在安装过程中,你会被要求输入你的博客URL。输入类似于https://yourdomain.com.您需要输入MariaDB数据库名称,以及在步骤4中创建的用户凭据。 ? 输入你的博客网址:https://yourdomain.com ? 输入MySQL主机名:localhost?输入你的MySQL用户名:ghost?输入你的MySQL密码:ghost_密码?输入您的Ghost数据库名称:Ghost 如果你正在使用Ubuntu20.04并看到下面的消息,你可以忽略它并继续安装。 系统检查失败,消息为:“Linux版本不是Ubuntu 16或18”。如果没有其他配置,Ghost CLI的某些功能可能无法工作。对于本地安装,我们建议使用“ghost install local”。 将自动创建ghost系统用户。建议您接受设置Nginx和SSL,这样您的博客就可以通过安全的HTTPS协议访问。此外,请接受设置Systemd服务,以便您能够轻松启动、停止或重新启动Ghost。 Ghost成功安装后,请转到https://yourdomain.com/ghost完成设置。首先,你需要创建一个账户。 然后你可以邀请一些员工用户来你的Ghost博客,或者你可以稍后再做。 第8步:编辑Nginx配置文件 默认情况下,Ghost的Nginx配置文件包含一个域名。如果希望Nginx同时为www域和非www域提供服务,请编辑配置文件。 sudo nano/etc/nginx/sites enabled/yourdomain。通用域名格式。形态 找到下面这行 服务器名称为你的域名。通用域名格式; 添加www域。 服务器名称为你的域名。com www.yourdomain。通用域名格式; 保存并关闭文件。然后删除/etc/nginx/sites enabled/yourdomain。com ssl。conf文件。 sudo rm/etc/nginx/sites enabled/yourdomain。com ssl。形态 然后安装Certbot让我们加密客户端 sudo apt安装certbot python3 certbot nginx 获取www域和非www域的SSL证书。 sudo certbot--nginx--agree tos--redirect--hsts--staple ocsp--email[email ;protected]-d yourdomain。com,www.yourdomain。通用域名格式 重新启动Nginx,就完成了。 sudo systemctl重启nginx 第9步:设置电子邮件通知 为了从Ghost博客发送电子邮件(用于重置密码、邀请员工用户、成员注册等),您需要配置SMTP设置。如果您想使用自己的电子邮件服务器,请阅读以下教程,轻松设置自己的电子邮件服务器。 如何使用iRedMail在Ubuntu18.04上轻松设置自己的电子邮件服务器 拥有自己的电子邮件服务器后,编辑Ghost配置文件。 sudo nano/var/www/ghost/config。生产json 默认情况下,邮件设置如下所示: “邮件”:{“运输”:“直接”}, 将其更改为使用SMTP。 “邮件”:{“传输”:“SMTP”,“发件人”:“[email ;protected],“选项”:{“服务”:“yourdomain.com”,“主机”:“mail.yourdomain.com”,“端口”:465,“secureConnection”:true,“auth”:{“用户”:“[email ;protected],“pass”:“电子邮件帐户密码”}, 请注意,Ghost不支持SMTP的587端口。保存并关闭文件。然后通过systemd服务重新启动Ghost。 sudo systemctl重启ghost_yourdomain-com。服务 现在你的Ghost博客应该可以发送电子邮件了。 收尾 就这样!我希望本教程能帮助你在Ubuntu服务器上安装Ghost。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?
-
如何在Ubuntu 20.04上设置OpenStreetMap Tile服务器
OpenStreetMap(OSM)是一个用户贡献的、可自由编辑的世界地图。你可以把它看作是谷歌地图的开源和自托管替代品。本教程将向您展示如何在Ubuntu20.04上构建自己的OpenStreetMap tile服务器,这样您就不必使用专有的地图服务。 OpenStreetMap功能 OpenStreetMap的数据覆盖了全世界,因此可以方便地支持任何国家或每个国家的用户。 OpenStreetMap每天每小时每分钟都会更新,您可以实时获得这些更新。 OpenStreetMap数据是免费和开放的,不收取订阅费和页面浏览费。 OpenStreetMap数据丰富而详细,包含大量与地面人员相关的数据——收集数据的人员。 先决条件/硬件要求 所需的RAM和磁盘空间取决于要使用哪个国家的地图。例如 英国地图至少需要12G内存和100GB磁盘空间。 整个行星地图至少需要32G RAM和1TB SSD(固态驱动器)。用旋转硬盘来绘制整个地球地图是不可行的。 如果要在web浏览器中预渲染分幅以加快地图加载速度,则需要更多磁盘空间,这是强烈建议的。查看此磁贴磁盘使用情况页面,查看预渲染磁贴需要多少磁盘空间。例如,如果要为行星地图预渲染从缩放级别0到缩放级别15的平铺,则需要额外的460 GB磁盘空间。 另外需要注意的是,将大型地图数据(如整个地球)导入PostgreSQL数据库需要很长时间。考虑添加更多的RAM,特别是使用SSD,而不是旋转硬盘来加速导入过程。 如果你打算主持整个世界地图,我建议你从康塔博购买超大VPS,康塔博以 10核CPU 60 GB内存 1.6 TB英特尔Optane SSD 每月只需26.99欧元。 第一步:升级软件 在服务器上进行任何主要工作之前,更新服务器软件始终是一种好的做法。通过SSH登录服务器并运行以下命令。 sudo apt update; sudo apt upgrade 第2步:安装PostgreSQL数据库服务器和PostGIS扩展 我们将使用PostgreSQL存储地图数据。PostGIS是PostgreSQL的地理空间扩展。运行以下命令来安装它们。 sudo apt install postgresql postgresql-contrib postgis postgresql-12-postgis-3 PostgreSQL数据库服务器将自动启动并侦听127.0.0.1:5432。安装过程中将在操作系统上创建postgres用户。它是PostgreSQL数据库服务器的超级用户。默认情况下,该用户没有密码,也不需要设置密码,因为您可以使用sudo切换到postgres用户并登录到PostgreSQL server。 sudo -u postgres -i 现在可以创建PostgreSQL数据库用户osm。 createuser osm 然后创建一个名为gis的数据库,同时让osm成为数据库的所有者-UTF8指定数据库中使用的字符编码方案为UTF8。 createdb -E UTF8 -O osm gis 接下来,为gis数据库创建postgis和hstore扩展。 psql -c "CREATE EXTENSION postgis;" -d gis psql -c "CREATE EXTENSION hstore;" -d gis 将osm设置为表所有者。 psql -c "ALTER TABLE spatial_ref_sys OWNER TO osm;" -d gis 退出postgres用户。 exit 在操作系统上创建osm用户,以便平铺服务器可以作为osm用户运行。以下命令将创建一个没有密码的系统用户。 sudo adduser --system --group osm 第3步:下载地图样式表和地图数据 切换到osm的主目录。 cd /home/osm/ 使用git将最新的CartoCSS地图样式表下载到osm用户的主目录。 sudo apt install git git clone https://github.com/gravitystorm/openstreetmap-carto.git 如果在运行上述命令时看到“权限被拒绝”错误,则可以使用以下命令授予权限。用真实用户名替换用户名。 sudo apt install acl sudo setfacl -R -m u:username:rwx /home/osm/ 接下来,运行以下命令以PBF(ProtoBufBinary)格式下载整个行星(50G)的地图数据。 wget -c http://planet.openstreetmap.org/pbf/planet-latest.osm.pbf 请注意openstreetmap的下载速度。org当前限制为2048kb/s。您可以从另一个镜像下载植物地图,如 wget -c https://download.bbbike.org/osm/planet/planet-latest.osm.pbf 如果你想要一张各个国家/州/省/市的地图,请访问http://download.geofabrik.de.还有,自行车。org以不同的格式提供了全球200多个城市和地区的摘录。例如,使用以下命令下载英国地图数据(1.1G)。 wget -c http://download.geofabrik.de/europe/great-britain-latest.osm.pbf 第4步:优化PostgreSQL Server性能 导入过程可能需要一些时间。为了加快这个过程,我们可以调整一些PostgreSQL server设置以提高性能。编辑PostgreSQL主配置文件。 sudo nano /etc/postgresql/12/main/postgresql.conf 首先,我们应该更改共享缓冲区的值。默认设置为: shared_buffers = 128MB 这个太小了。经验法则是将其设置为总RAM的25%(不包括交换空间)。例如,我的VPS有60G RAM,所以我将其设置为: shared_buffers = 15GB 找到下面这行。 #work_mem = 4MB #maintenance_work_mem = 64MB 同样,该值太小。我使用以下设置。 work_mem = 1GB maintenance_work_mem = 8GB 然后找到下面一行。 #effective_cache_size = 4GB 如果你像我一样有很多RAM,你可以为有效的缓存大小设置一个更高的值,比如20G。 effective_cache_size = 20GB 保存并关闭文件。重新启动PostgreSQL以使更改生效。 sudo systemctl restart postgresql 默认情况下,PostgreSQL会尝试在RAM中使用巨大的页面。然而,Linux默认情况下不会分配巨大的页面。检查PostgreSQL的进程ID。 sudo head -1 /var/lib/postgresql/12/main/postmaster.pid 样本输出: 7031 然后检查该进程ID的峰值。 grep ^VmPeak /proc/7031/status 样本输出: VmPeak: 16282784 kB 这是PostgreSQL将使用的峰值内存大小。现在检查Linux中巨大页面的大小。 cat /proc/meminfo | grep -i huge 样本输出: AnonHugePages: 0 kB ShmemHugePages: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB Hugetlb: 0 kB 我们可以计算出我们需要多少巨大的页面。将VmPeak值除以巨大页面的大小:16282784KB/2048KB=7950。编辑/etc/sysctl。conf文件。 sudo nano /etc/sysctl.conf 在该文件末尾添加以下行以分配7950个大页面。 vm.nr_hugepages = 7950 保存并关闭文件。然后应用更改。 sudo sysctl -p 如果你再次查看meminfo, cat /proc/meminfo | grep -i huge 我们可以看到有7950个巨大的页面可用。 AnonHugePages: 0 kB ShmemHugePages: 0 kB HugePages_Total: 7950 HugePages_Free: 7950 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB 重新启动PostgreSQL以使用大型页面。 sudo systemctl restart postgresql 在远程服务器上使用屏幕 由于导入过程可能需要很长时间,并且您的计算机可能已断开与Internet的连接,因此建议使用screen实用程序保持会话的活动状态。在Ubuntu 20.04服务器上安装屏幕: sudo apt install screen 然后启动屏幕: screen 第一次启动时,您将看到一个介绍文本,只需按Enter键即可结束。然后你就可以像往常一样运行命令了。 步骤5:将地图数据导入PostgreSQL 要导入地图数据,我们需要安装osm2pgsql,将OpenStreetMap数据转换为支持postGIS的PostgreSQL数据库。 sudo apt install osm2pgsql 向postgres用户授予权限。 sudo setfacl -R -m u:postgres:rwx /home/osm/ 切换到postgres用户。 sudo -u postgres -i 运行以下命令将地图样式表和地图数据加载到gis数据库中。最新取代英国。奥斯曼。pbf与您自己的地图数据文件。 osm2pgsql --slim -d gis --hstore --multi-geometry --number-processes 10 --tag-transform-script /home/osm/openstreetmap-carto/openstreetmap-carto.lua --style /home/osm/openstreetmap-carto/openstreetmap-carto.style -C 32000 /home/osm/great-britain-latest.osm.pbf 哪里 --苗条模式:在苗条模式下运行,而不是在正常模式下运行。如果希望将来使用OSM更改文件(OSC)更新地图数据,则需要此选项。 -d gis:选择数据库。 --hstore:将不带列的标记添加到PostgreSQL表的另一个hstore(key/value)列中 --多重几何图形:在postgresql表中生成多重几何图形特征。 --样式:指定样式文件的位置 --进程数:服务器上的CPU核心数。我有10个。 -C标志以兆字节为单位指定缓存大小。它应该是你机器上可用内存的70%左右。缓存大小越大,导入速度越快。例如,我的服务器有60GB的空闲RAM,所以我可以指定-C 32000。请注意,PostgreSQL将需要用于共享缓冲区的RAM。使用此公式计算缓存大小应该有多大:(总RAM-PostgreSQL共享_缓冲区)*70% 最后,需要指定地图数据文件的位置。 命令输出: 如果要导入完整的行星地图数据,请使用--drop选项和--flat nodes选项来提高导入速度。请注意--flat nodes选项不适用于小贴图。 osm2pgsql --slim -d gis --drop --flat-nodes /home/osm/nodes.cache --hstore --multi-geometry --number-processes 10 --tag-transform-script /home/osm/openstreetmap-carto/openstreetmap-carto.lua --style /home/osm/openstreetmap-carto/openstreetmap-carto.style -C 32000 /home/osm/planet-latest.osm.pbf 在导入过程中,RAM的使用将逐渐增加。 现在,您可能不需要在服务器上执行其他操作。由于您使用的是Screen,所以可以按Ctrl+A,释放这些键,然后按D键从当前屏幕会话中分离。您将看到如下消息。 [detached from 32113.pts-1.focal] 这告诉我之前的屏幕会话ID是32113。您可以从SSH会话中注销,甚至可以关闭计算机。别担心,OSM导入过程仍在运行。当需要返回并检查导入进度时,请将SSH连接到服务器并运行以下命令以获取上一个屏幕会话ID。 screen -ls 样本输出: There is a screen on: 32113.pts-1.focal (05/19/2020 03:45:29 PM) (Detached) 1 Socket in /run/screen/S-linuxbabe. 然后可以重新连接到上一个屏幕会话。 screen -r 32113 这样你就能继续工作了。导入完成后,将gis数据库的所有权限授予osm用户。 psql -c "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO osm;" -d gis 退出postgres用户。 exit 注意:如果osm2pgsql导入尚未完成,请不要继续执行步骤6。 故障排除 如果从PBF文件导入地图数据时遇到以下错误, PBF error : invalid Blobheader size (> max_blob_header_size) 这可能是因为您的PBF文件已损坏。验证PBF文件的md5sum,如下所示。 md5sum great-britain-latest.osm.pbf 将结果与PBF文件下载页面上的md5sum值进行比较。 第6步:安装Renderd和mod_tile renderd是一个后台程序,用于从PostgreSQL数据库呈现OpenStreetMap分幅。 mod_tile是一个Apache模块,用于向客户端(例如web浏览器)提供tile服务 默认的Ubuntu存储库不包括mod_tile和renderd,但我们可以从OSM PPA安装它们。 sudo apt install software-properties-common sudo add-apt-repository ppa:osmadmins/ppa sudo apt install apache2 libapache2-mod-tile renderd 将安装Apache web服务器,并在/etc/apache2/conf available/renderd上创建renderd的配置文件。形态。 启用平铺模块。 sudo a2enmod tile 接下来,为磁贴服务器创建一个虚拟主机。 sudo nano /etc/apache2/sites-available/tileserver_site.conf 在此文件中添加以下行。更换瓷砖。你的领域。使用你的真实域名。别忘了记录。 <VirtualHost *:80> ServerName tile.your-domain.com LogLevel info Include /etc/apache2/conf-available/renderd.conf </VirtualHost> 保存并关闭文件。启用此虚拟主机。 sudo a2ensite tileserver_site.conf 重新启动Apache以使更改生效。 sudo systemctl restart apache2 渲染守护进程将自动启动,如下所示: systemctl status renderd 第7步:生成Mapnik样式表 安装所需的软件包。 sudo apt install curl unzip gdal-bin mapnik-utils libmapnik-dev python3-pip 我们还需要使用以下命令从上游存储库安装nodejs和npm。 curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - sudo apt-get install -y nodejs 然后用npm安装carto软件包。 sudo npm install -g carto 安装psycopg2 Python模块。 sudo -H pip3 install psycopg2==2.8.5 切换到postgres用户。 sudo -u postgres -i 将Cd放入carto style目录。 cd /home/osm/openstreetmap-carto/ 获取形状文件。 scripts/get-external-data.py 如果在运行上述命令时遇到以下错误消息,则说明您存在DNS问题。只需等待几分钟,然后再次运行Python脚本。 Failed to establish a new connection: [Errno -3] Temporary failure in name resolution 现在使用carto map样式表编译器构建Mapnik XML样式表。 carto project.mml > style.xml 将gis数据库的所有权限授予osm用户。 psql -c "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO osm;" -d gis 退出postgres用户。 exit 第8步:安装字体 您需要安装ttf dejavu软件包。 sudo apt install ttf-dejavu 要显示非拉丁字符,请安装以下软件包。 sudo apt install fonts-noto-cjk fonts-noto-cjk-extra fonts-noto-hinted fonts-noto-unhinted ttf-unifont 步骤9:配置renderd 编辑渲染配置文件。 sudo nano /etc/renderd.conf 在[renderd]部分,根据服务器上的CPU内核数更改线程数。 num_threads=10 添加默认图层。以分号(;)开头的行这些都是评论。 ; ADD YOUR LAYERS: [default] URI=/osm/ XML=/home/osm/openstreetmap-carto/style.xml HOST=tile.your-domain.com 保存并关闭文件。然后为renderd服务创建一个新目录。 sudo mkdir /etc/systemd/system/renderd.service.d/ 在此目录下创建自定义配置文件。 sudo nano /etc/systemd/system/renderd.service.d/custom.conf 在此文件中添加以下行。 [Service] User=osm 保存并关闭文件。更改/run/renderd/和/var/cache/renderd/tiles/目录的所有权。 sudo chown osm /run/renderd/ -R sudo chown osm /var/cache/renderd/tiles/ -R 然后重新启动renderd服务。 sudo systemctl daemon-reload sudo systemctl restart renderd 你需要查看renderd的日志。 sudo journalctl -eu renderd 确保renderd在重启后不会在日志中产生任何错误,否则地图将不会显示。 第10步:测试 在web浏览器地址栏中,键入 tile.your-domain.com/osm/0/0/0.png 你应该看到世界地图的瓷砖。恭喜!您刚刚成功构建了自己的OSM磁贴服务器。 如果已启用UFW防火墙,请确保使用以下命令打开端口80和443。 sudo ufw allow 80,443/tcp 如果您看到404 not found错误,只需等待几分钟,在浏览器中刷新页面,它应该能够加载世界地图的平铺。如果仍然无法加载,则重新启动renderd服务(sudo systemctl restart renderd)。 第11步:显示平铺的网络地图 现在您有了一个工作的OSM tile服务器,您需要使用JavaScript映射库在其他服务器上显示映射。在本教程中,我将在tile服务器上创建web地图,但您可以在任何其他服务器上创建。 平铺网络地图在OpenStreetMap术语中也称为slippy地图。有两个免费的开源JavaScript地图库可用于tile服务器:OpenLayer和传单。传单的优点是使用简单,而且地图便于移动。 露天层 要使用OpenLayer显示你的slippy地图,请从OpenLayer下载JavaScript和CSS。组织并将其解压缩到webroot文件夹。 cd /var/www/html/ sudo wget https://github.com/openlayers/openlayers/releases/download/v5.3.0/v5.3.0.zip sudo unzip v5.3.0.zip 接下来,创建索引。html文件。 sudo nano /var/www/html/index.html 在文件中粘贴以下HTML代码。替换红色文本,并根据需要调整经度、纬度和缩放级别。 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Accessible Map</title> <link rel="stylesheet" href="http://tile.your-domain.com/v5.3.0/css/ol.css" type="text/css"> <script src="http://tile.your-domain.com/v5.3.0/build/ol.js"></script> <style> a.skiplink { position: absolute; clip: rect(1px, 1px, 1px, 1px); padding: 0; border: 0; height: 1px; width: 1px; overflow: hidden; } a.skiplink:focus { clip: auto; height: auto; width: auto; background-color: #fff; padding: 0.3em; } #map:focus { outline: #4A74A8 solid 0.15em; } </style> </head> <body> <a class="skiplink" href="#map">Go to map</a> <div id="map" class="map" tabindex="0"></div> <button id="zoom-out">Zoom out</button> <button id="zoom-in">Zoom in</button> <script> var map = new ol.Map({ layers: [ new ol.layer.Tile({ source: new ol.source.OSM({ url: 'http://tile.your-domain.com/osm/{z}/{x}/{y}.png' }) }) ], target: 'map', controls: ol.control.defaults({ attributionOptions: /** @type {olx.control.AttributionOptions} */ ({ collapsible: false }) }), view: new ol.View({ center: [244780.24508882355, 7386452.183179816], zoom:5 }) }); document.getElementById('zoom-out').onclick = function() { var view = map.getView(); var zoom = view.getZoom(); view.setZoom(zoom - 1); }; document.getElementById('zoom-in').onclick = function() { var view = map.getView(); var zoom = view.getZoom(); view.setZoom(zoom + 1); }; </script> </body> </html> 保存并关闭文件。现在你可以通过在浏览器地址栏中输入你的子域来查看你的拖拉地图。 tile.your-domain.com 或 tile.your-domain.com/index.html 传单 要使用Leftlet显示slippy地图,请从leftletjs下载JavaScript和CSS。com并将其解压缩到webroot文件夹。 cd /var/www/html/ sudo wget http://cdn.leafletjs.com/leaflet/v1.7.1/leaflet.zip sudo unzip leaflet.zip 接下来,创建索引。html文件。如果已经有索引。html文件,然后删除原始内容。 sudo nano /var/www/html/index.html 在文件中粘贴以下HTML代码。替换红色文本,并根据需要调整经度、纬度和缩放级别。 <html> <head> <meta charset="UTF-8"> <title>My first osm</title> <link rel="stylesheet" type="text/css" href="leaflet.css"/> <script type="text/javascript" src="leaflet.js"></script> <style> #map{width:100%;height:100%} </style> </head> <body> <div id="map"></div> <script> var map = L.map('map').setView([55,0.8],6); L.tileLayer('http://tile.your-domain.com/osm/{z}/{x}/{y}.png',{maxZoom:18}).addTo(map); </script> </body> </html> 保存并关闭文件。现在,您可以通过在浏览器中键入服务器IP地址来查看拖沓的地图。 tile.your-domain.com 或 tile.your-domain.com/index.html 步骤12:预渲染瓷砖 动态渲染平铺将增加在web浏览器中加载地图的时间。要预渲染平铺而不是动态渲染,请使用以下render_list命令。使用-z和-z标志指定缩放级别,并根据服务器上的CPU内核数替换线程数。Render_list通过向渲染守护进程发送请求来渲染贴图分幅列表。预渲染的磁贴将缓存在/var/lib/mod_tile目录中。 render_list -m default -a -z 0 -Z 19 --num-threads=10 如果以后更新了贴图数据,可以使用--force选项再次预渲染所有分片。 render_list -m default -a -z 0 -Z 19 --num-threads=10 --force 要在背景中渲染贴图分幅,请添加&;结尾的符号。 render_list -m default -a -z 0 -Z 19 --num-threads=10 & 现在你可以关闭终端窗口了。要检查呈现进度,请打开另一个SSH会话,然后运行以下命令。 sudo journalctl -eu renderd 上面的命令将显示renderd服务的最新日志。以下几行显示我的OSM服务器现在正在以缩放级别12渲染地图分幅。 renderd[20838]: DEBUG: START TILE default 12 1008-1015 4056-4063, new metatile renderd[20838]: Rendering projected coordinates 12 1008 4056 -> -10175297.205328|-19724422.274944 -10097025.688364|-19646150.757980 to a 8 x 8 tile renderd[20838]: DEBUG: DONE TILE default 12 1008-1015 3984-3991 in 0.799 seconds renderd[20838]: DEBUG: Sending render cmd(3 default 12/1008/3984) with protocol version 2 to fd 18 renderd[20838]: DEBUG: Got incoming request with protocol version 2 renderd[20838]: DEBUG: Got command RenderBulk fd(18) xml(default), z(12), x(1008), y(4064), mime(image/png), options() renderd[20838]: DEBUG: START TILE default 12 1008-1015 4064-4071, new metatile renderd[20838]: Rendering projected coordinates 12 1008 4064 -> -10175297.205328|-19802693.791908 -10097025.688364|-19724422.274944 to a 8 x 8 tile 步骤13:启用HTTPS 为了加密HTTP流量,我们可以从Let's encrypt获得并安装免费的TLS证书。osmadmins/ppa ppa包含一个出现故障的certbot二进制文件,因此我建议从快照存储安装certbot。 sudo apt install snapd sudo snap install --classic certbot 然后运行以下命令获取并安装TLS证书。 sudo /snap/bin/certbot --apache --agree-tos --redirect --hsts --staple-ocsp --must-staple --email [email protected] -d tile.your-domain.com 安装证书后,刷新网页,您将在地址栏中看到一个锁。 如果你在Firefox地址栏中看到一个黄色的三角形,这意味着tile URL仍在使用HTTP。你需要编辑索引。html文件,并使用以下命令将所有HTTP协议替换为HTTPS。 sudo sed -i 's/http/https/g' /var/www/index.html 步骤14:启用HTTP2 为了进一步提高映射加载性能,可以启用HTTP2协议。首先,需要启用HTTP2模块。 sudo a2enmod http2 然后打开SSL虚拟主机文件。 sudo nano /etc/apache2/sites-enabled/tileserver_site-le-ssl.conf 在打开后放置以下指令<;VirtualHost*:443>;标签 Protocols h2 http/1.1 保存并关闭文件。然后重启Apache,使更改生效。 sudo systemctl restart apache2 使用HTTP Referrer标头限制对OSM磁贴服务器的访问 默认情况下,任何人都可以使用OpenLayer或传单创建一个带有tile服务器URL的滑动地图。要限制对tile服务器的访问,请编辑Apache虚拟主机文件。 sudo nano /etc/apache2/sites-enabled/tileserver_site-le-ssl.conf 在<;VirtualHost>;标签。 <Location /osm> SetEnvIf Referer example/.com trusted_referer Order deny,allow Deny from all Allow from env=trusted_referer </Location> 上面的代码检查HTTP referer头是否包含您自己的域。否则,将拒绝访问/osm目录。反斜杠用于转义点字符。要将多个主机名添加为受信任的引用程序,请使用以下语法。 SetEnvIf Referer (example/.com|www/.example/.com|map/.example/.com) trusted_referer 保存并关闭文件。然后测试语法。 sudo apache2ctl -t 如果语法正确,请重新加载Apache以使更改生效。 sudo systemctl reload apache2 自动更新TLS证书 您可以创建Cron作业来自动续订TLS证书。只需打开root用户的crontab文件。 sudo crontab -e 在文件底部添加以下行。 @daily /snap/bin/certbot renew --quiet && systemctl reload apache2 不同主机上的PostgreSQL数据库和Web服务器 如果PostgreSQL和Apache web服务器位于不同的主机上,则需要编辑该项目。Apache主机上的mml文件。 nano /home/osm/openstreetmap-carto-4.20.0/project.mml 找到以下几行: osm2pgsql: &osm2pgsql type: "postgis" dbname: "gis" key_field: "" geometry_field: "way" extent: "-20037508,-20037508,20037508,20037508" 指定PostgreSQL数据库服务器的IP地址。 osm2pgsql: &osm2pgsql type: "postgis" host: "10.0.0.2" dbname: "gis" key_field: "" geometry_field: "way" extent: "-20037508,-20037508,20037508,20037508" 保存并关闭文件。然后使用carto map样式表编译器构建Mapnik XML样式表。 carto project.mml > style.xml 在PostgreSQL数据库服务器上,编辑主配置文件。 sudo nano /etc/postgresql/12/main/postgresql.conf 添加以下行,将PostgreSQL设置为在所有接口上侦听。 listen_addresses = '*' 保存并关闭文件。然后编辑PostgreSQL客户端身份验证配置文件。 sudo nano /etc/postgresql/12/main/pg_hba.conf 在文件末尾添加以下行,以允许osm用户从Apache主机登录。将10.0.0.1替换为Apache主机的IP地址。 host gis osm 10.0.0.1/32 trust 保存并关闭文件。然后重新启动PostgreSQL。 sudo systemctl restart postgresql 在Apache主机上重新启动渲染守护程序。 sudo systemctl restart renderd 你需要查看renderd的日志。确保renderd不会在日志中产生任何错误,否则地图将不会显示。 sudo journalctl -eu renderd 还应限制对PostgreSQL数据库服务器端口5432的访问。例如,您可以使用以下UFW命令只允许Apache主机的IP地址。 sudo ufw allow in from 10.0.0.1 to any port 5432 下一步 我希望本教程能帮助您在Ubuntu 20.04上安装OpenStreetMap tile服务器。您可能还需要设置Namingm地理编码服务器,以提供地址查找功能。 在Ubuntu20.04上设置OSM地理编码服务器 您可以使用开源路由机器(OSRM)为地图提供导航功能。 如何在Ubuntu 20.04上安装OSRM——开源路由机器 和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?