в тасках build и copy нужно обязательно делать return. Он сигнализирует о том, что задача закончилась (возвращает Promise) и можно синхронно выполнять следующую
И вообще во всех тасках по феншую надо делать return
gulp.task('copy', function () {
return gulp.src('src/**/*.*')
.pipe(gulp.dest('public'))
;
});
Сделать проброс портов из внешнего ip на локальный. Использовать https://www.noip.com/ для ссылки на свой внешний айпи, если он динамический. У них есть утилитка для https://www.noip.com/download для автообновления вашего ip.